From 699edf8f30cec66b027de673abe525391510fb60 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Thu, 16 Jun 2016 11:47:08 -0700 Subject: [PATCH] unity and native osx bundles and frameworks build from the same project now --- .../project.pbxproj | 1617 ++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 41752 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 + .../xcschemes/ZeroTierSDK_OSX.xcscheme | 80 + .../ZeroTierSDK_Unity3D_OSX.xcscheme | 80 + .../ZeroTierSDK_Unity3D_iOS.xcscheme | 80 + .../xcschemes/ZeroTierSDK_iOS.xcscheme | 80 + .../xcschemes/xcschememanagement.plist | 57 + .../ZeroTierSDK_OSX/Info.plist | 28 + .../ZeroTierSDK_OSX/ZeroTierSDK_OSX.h | 19 + .../ZeroTierSDK_Unity3D_OSX/Info.plist | 28 + .../ZeroTierSDK_Unity3D_iOS/Info.plist | 28 + .../ZeroTierSDK_iOS/Info.plist | 26 + .../ZeroTierSDK_iOS/ZeroTierSDK_iOS.h | 19 + integrations/Docker/README.md | 2 +- .../Unity3D/Assembly-CSharp-Editor.csproj | 109 + integrations/Unity3D/Assembly-CSharp.csproj | 85 + integrations/Unity3D/Assets/CameraControl.js | 194 + integrations/Unity3D/Assets/Demo.cs | 90 + integrations/Unity3D/Assets/MainScene.unity | Bin 0 -> 67160 bytes integrations/Unity3D/Assets/MyZeroTier.cs | 8 + .../Unity3D/Assets/OBJ-IO/Editor.meta | 9 + .../Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs | 50 + .../Assets/OBJ-IO/Editor/OBJEditor.cs.meta | 10 + .../Unity3D/Assets/OBJ-IO/Examples.meta | 9 + .../Assets/OBJ-IO/Examples/Meshes.meta | 9 + .../OBJ-IO/Examples/Meshes/Materials.meta | 9 + .../Meshes/Materials/Cube_Instance_0Mat.mat | Bin 0 -> 4904 bytes .../Materials/Cube_Instance_0Mat.mat.meta | 8 + .../Meshes/Materials/Teapot001Mat.mat | Bin 0 -> 4896 bytes .../Meshes/Materials/Teapot001Mat.mat.meta | 8 + .../Materials/Teapot001_Instance_0Mat.mat | Bin 0 -> 4908 bytes .../Teapot001_Instance_0Mat.mat.meta | 8 + .../Assets/OBJ-IO/Examples/Meshes/Teapot.obj | 2354 +++++++++++ .../OBJ-IO/Examples/Meshes/Teapot.obj.meta | 77 + .../Examples/Meshes/Teapot_Modified.obj | 3506 +++++++++++++++++ .../Examples/Meshes/Teapot_Modified.obj.meta | 83 + .../Assets/OBJ-IO/Examples/Scenes.meta | 9 + .../OBJ-IO/Examples/Scenes/Example.unity | Bin 0 -> 18064 bytes .../OBJ-IO/Examples/Scenes/Example.unity.meta | 6 + .../Assets/OBJ-IO/Examples/Scripts.meta | 9 + .../Assets/OBJ-IO/Examples/Scripts/Example.cs | 52 + .../OBJ-IO/Examples/Scripts/Example.cs.meta | 10 + .../Unity3D/Assets/OBJ-IO/Plugins.meta | 9 + .../Assets/OBJ-IO/Plugins/Extension.meta | 9 + .../Plugins/Extension/GameObjectExtension.cs | 112 + .../Extension/GameObjectExtension.cs.meta | 10 + .../OBJ-IO/Plugins/Extension/MeshExtension.cs | 627 +++ .../Plugins/Extension/MeshExtension.cs.meta | 10 + .../Plugins/Extension/StringExtensions.cs | 43 + .../Extension/StringExtensions.cs.meta | 10 + .../Plugins/Extension/Texture2DExtension.cs | 55 + .../Extension/Texture2DExtension.cs.meta | 10 + .../Plugins/Extension/TransformExtension.cs | 28 + .../Extension/TransformExtension.cs.meta | 10 + .../Plugins/Extension/UnityExtension.cs | 239 ++ .../Plugins/Extension/UnityExtension.cs.meta | 10 + .../Plugins/Extension/VectorExtension.cs | 35 + .../Plugins/Extension/VectorExtension.cs.meta | 10 + .../Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta | 9 + .../Assets/OBJ-IO/Plugins/Mesh/OBJ.meta | 9 + .../Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs | 18 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta | 10 + .../Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs | 101 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta | 10 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs | 25 + .../Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta | 10 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs | 27 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta | 10 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs | 219 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta | 10 + .../OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs | 42 + .../Plugins/Mesh/OBJ/OBJMaterial.cs.meta | 10 + .../Unity3D/Assets/OBJ-IO/Plugins/Utils.meta | 9 + .../OBJ-IO/Plugins/Utils/Int32Converter.cs | 39 + .../Plugins/Utils/Int32Converter.cs.meta | 10 + integrations/Unity3D/Assets/OBJ-IO/Readme.txt | 36 + .../Unity3D/Assets/OBJ-IO/Readme.txt.meta | 6 + integrations/Unity3D/Assets/WorldMain.cs | 1 + integrations/Unity3D/Assets/ZT.mat | Bin 0 -> 4888 bytes integrations/Unity3D/Assets/ZeroTier.cs | 282 ++ integrations/Unity3D/Assets/ZeroTierUtils.cs | 55 + integrations/Unity3D/Assets/smcs.rsp | 1 + integrations/Unity3D/Assets/zerotier-icon.png | Bin 0 -> 26898 bytes .../ProjectSettings/AudioManager.asset | Bin 0 -> 4140 bytes .../ProjectSettings/ClusterInputManager.asset | Bin 0 -> 4104 bytes .../ProjectSettings/DynamicsManager.asset | Bin 0 -> 4276 bytes .../ProjectSettings/EditorBuildSettings.asset | Bin 0 -> 4104 bytes .../ProjectSettings/EditorSettings.asset | Bin 0 -> 4212 bytes .../ProjectSettings/GraphicsSettings.asset | Bin 0 -> 4256 bytes .../ProjectSettings/InputManager.asset | Bin 0 -> 5520 bytes .../ProjectSettings/NavMeshAreas.asset | Bin 0 -> 4384 bytes .../ProjectSettings/NetworkManager.asset | Bin 0 -> 4112 bytes .../ProjectSettings/Physics2DSettings.asset | Bin 0 -> 4308 bytes .../ProjectSettings/ProjectSettings.asset | Bin 0 -> 37361 bytes .../ProjectSettings/ProjectVersion.txt | 2 + .../ProjectSettings/QualitySettings.asset | Bin 0 -> 5060 bytes .../Unity3D/ProjectSettings/TagManager.asset | Bin 0 -> 4308 bytes .../Unity3D/ProjectSettings/TimeManager.asset | Bin 0 -> 4112 bytes .../ProjectSettings/UnityAdsSettings.asset | Bin 0 -> 4116 bytes .../UnityConnectSettings.asset | Bin 0 -> 4116 bytes .../Unity3D/ZeroTier-Unity3D-Test.sln | 29 + .../Unity3D/ZeroTier-Unity3D-Test.userprefs | 21 + make-linux.mk | 6 +- make-mac.mk | 8 +- src/SDK_Debug.c | 2 +- src/SDK_EthernetTap.cpp | 2 +- src/SDK_Intercept.c | 4 + src/SDK_ServiceSetup.cpp | 6 +- tests/kq/build.sh | 2 +- 111 files changed, 11112 insertions(+), 14 deletions(-) create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist create mode 100644 integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h create mode 100644 integrations/Unity3D/Assembly-CSharp-Editor.csproj create mode 100644 integrations/Unity3D/Assembly-CSharp.csproj create mode 100644 integrations/Unity3D/Assets/CameraControl.js create mode 100644 integrations/Unity3D/Assets/Demo.cs create mode 100644 integrations/Unity3D/Assets/MainScene.unity create mode 100644 integrations/Unity3D/Assets/MyZeroTier.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Editor.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Readme.txt create mode 100644 integrations/Unity3D/Assets/OBJ-IO/Readme.txt.meta create mode 100644 integrations/Unity3D/Assets/WorldMain.cs create mode 100644 integrations/Unity3D/Assets/ZT.mat create mode 100644 integrations/Unity3D/Assets/ZeroTier.cs create mode 100644 integrations/Unity3D/Assets/ZeroTierUtils.cs create mode 100644 integrations/Unity3D/Assets/smcs.rsp create mode 100644 integrations/Unity3D/Assets/zerotier-icon.png create mode 100644 integrations/Unity3D/ProjectSettings/AudioManager.asset create mode 100644 integrations/Unity3D/ProjectSettings/ClusterInputManager.asset create mode 100644 integrations/Unity3D/ProjectSettings/DynamicsManager.asset create mode 100644 integrations/Unity3D/ProjectSettings/EditorBuildSettings.asset create mode 100644 integrations/Unity3D/ProjectSettings/EditorSettings.asset create mode 100644 integrations/Unity3D/ProjectSettings/GraphicsSettings.asset create mode 100644 integrations/Unity3D/ProjectSettings/InputManager.asset create mode 100644 integrations/Unity3D/ProjectSettings/NavMeshAreas.asset create mode 100644 integrations/Unity3D/ProjectSettings/NetworkManager.asset create mode 100644 integrations/Unity3D/ProjectSettings/Physics2DSettings.asset create mode 100644 integrations/Unity3D/ProjectSettings/ProjectSettings.asset create mode 100644 integrations/Unity3D/ProjectSettings/ProjectVersion.txt create mode 100644 integrations/Unity3D/ProjectSettings/QualitySettings.asset create mode 100644 integrations/Unity3D/ProjectSettings/TagManager.asset create mode 100644 integrations/Unity3D/ProjectSettings/TimeManager.asset create mode 100644 integrations/Unity3D/ProjectSettings/UnityAdsSettings.asset create mode 100644 integrations/Unity3D/ProjectSettings/UnityConnectSettings.asset create mode 100644 integrations/Unity3D/ZeroTier-Unity3D-Test.sln create mode 100644 integrations/Unity3D/ZeroTier-Unity3D-Test.userprefs diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj new file mode 100644 index 0000000..cae31ed --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj @@ -0,0 +1,1617 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7CC003261D1216E3003E68DC /* ZeroTierSDK_iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CC003251D1216E3003E68DC /* ZeroTierSDK_iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7CC003501D12178D003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC003511D12178D003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC003521D12178D003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC003531D12178D003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC003541D12178D003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC003551D12178D003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC003561D12178D003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC003591D1217A1003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; + 7CC0035C1D1217B2003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC003651D1217C3003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC003661D1217C3003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC003671D1217C3003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC003681D1217C3003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC003691D1217C3003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC0036A1D1217C3003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC0036B1D1217C3003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC0036C1D1217C3003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC0037D1D1217D1003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC0037E1D1217D1003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC0037F1D1217D1003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC003801D1217D1003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC003811D1217D1003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC003821D1217D1003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC003831D1217D1003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC003841D1217D1003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC003851D1217D1003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC003861D1217D1003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC003871D1217D1003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC003881D1217D1003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC003891D1217D1003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC0038A1D1217D1003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC0038B1D1217D1003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC0038C1D1217D1003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC003951D1217DD003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC003961D1217DD003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC003971D1217DD003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC003981D1217DD003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC003991D1217DD003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC0039A1D1217DD003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC0039B1D1217DD003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC0039C1D1217DD003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC003A01D1217F2003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC003A11D1217F2003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC003A21D1217F2003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC003DB1D121833003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC003DC1D121833003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC003DD1D121833003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC003DE1D121833003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC003DF1D121833003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC003E01D121833003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC0041F1D121840003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004201D121840003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004211D121840003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004221D121840003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004231D121840003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC004241D121840003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC004251D121840003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC004261D121840003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC004271D121840003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC004281D121840003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC004291D121840003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC0042A1D121840003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC0042B1D121840003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC0042C1D121840003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC0042D1D121840003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC0042E1D121840003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC0042F1D121840003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004301D121840003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004311D121840003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004321D121840003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004331D121840003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC004341D121840003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC004351D121840003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC0043A1D12184F003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC0043B1D12184F003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC0043C1D1316BF003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC0043D1D1316BF003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC0043E1D1316BF003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC0043F1D1316BF003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC004401D1316BF003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC004411D1316BF003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC004421D1316BF003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC004431D1316F5003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC004441D1316F5003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC004451D1316F5003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004461D1316F5003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004471D1316F5003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004481D1316F5003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004491D1316F5003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC0044A1D1316F5003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC0044B1D1316F5003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC0044C1D1316F5003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC0044D1D1316F5003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC0044E1D1316F5003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC0044F1D1316F5003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC004501D1316F5003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC004511D1316F5003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC004521D1316F5003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC004531D1316F5003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC004541D1316F5003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC004551D1316F5003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004561D1316F5003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004571D1316F5003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004581D1316F5003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004591D1316F5003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC0045A1D1316F5003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC0045B1D1316F5003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC0045C1D1316F5003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC0045D1D1316F5003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC0045E1D1316F5003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC0045F1D1316F5003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC004601D1316F5003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC004611D1316F5003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC004621D131704003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC004631D131704003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC004641D131704003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC004651D131704003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC004661D131704003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC004671D131704003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC004681D131704003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC004691D131704003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC0046A1D131704003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC0046B1D131704003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC0046C1D131704003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC0046D1D131704003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC0046E1D131704003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC0046F1D131704003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC004701D131704003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC004711D131704003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC004721D131704003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC004731D131704003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC004741D131704003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC004751D131704003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC004761D131704003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC004771D131704003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC004781D131704003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC004791D131704003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC0047A1D131704003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC0047B1D131704003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC0047C1D131704003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC0047D1D131704003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC0047E1D131704003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC0047F1D131704003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC004801D131704003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC004811D131704003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC004821D131704003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC004831D131704003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC004841D131704003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC004851D1318DA003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC004861D1318DA003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; + 7CC004871D131E21003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC004881D131E21003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC004891D131E21003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC0048A1D131E21003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC0048B1D131E21003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC0048C1D131E21003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC0048D1D131E21003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC0048E1D131E21003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC0048F1D131E21003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC004901D131E21003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004911D131E21003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004921D131E21003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004931D131E21003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004941D131E21003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC004951D131E21003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC004961D131E21003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC004971D131E21003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC004981D131E21003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC004991D131E21003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC0049A1D131E21003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC0049B1D131E21003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC0049C1D131E21003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC0049D1D131E21003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC0049E1D131E21003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC0049F1D131E21003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC004A01D131E21003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004A11D131E21003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004A21D131E21003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004A31D131E21003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004A41D131E21003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC004A51D131E21003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC004A61D131E21003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC004A71D131E21003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC004A81D131E21003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC004A91D131E21003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC004AA1D131E21003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC004AB1D131E21003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC004AC1D131E21003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC004AD1D131E2D003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC004AE1D131E2D003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC004AF1D131E2D003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC004B01D131E2D003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC004B11D131E2D003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC004B21D131E2D003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC004B31D131E2D003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC004B41D131E2D003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC004B61D131E2D003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC004B71D131E2D003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC004B81D131E2D003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC004B91D131E2D003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC004BA1D131E2D003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC004BB1D131E2D003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC004BC1D131E2D003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC004BD1D131E2D003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC004BE1D131E2D003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC004BF1D131E2D003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC004C01D131E2D003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC004C11D131E2D003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC004C21D131E2D003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC004C31D131E2D003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC004C41D131E2D003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC004C51D131E2D003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC004C61D131E2D003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC004C71D131E2D003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC004C81D131E2D003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC004C91D131E2D003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC004CA1D131E2D003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC004CB1D131E2D003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC004CC1D131E2D003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC004CD1D131E2D003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC004CE1D131E2D003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC004CF1D131E2D003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC004D01D131E37003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC004D11D131E37003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; + 7CC004D21D131F76003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC004D71D13247A003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC004D81D13247A003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC004D91D13247A003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC004DA1D13247A003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC004DB1D13247A003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC004DC1D13247A003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC004DD1D13247A003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC004DE1D1324A2003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC004DF1D1324A2003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC004E01D1324A2003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004E11D1324A2003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004E21D1324A2003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004E31D1324A2003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004E41D1324A2003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC004E51D1324A2003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC004E61D1324A2003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC004E71D1324A2003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC004E81D1324A2003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC004E91D1324A2003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC004EA1D1324A2003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC004EB1D1324A2003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC004EC1D1324A2003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC004ED1D1324A2003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC004EE1D1324A2003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC004EF1D1324A2003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC004F01D1324A2003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004F11D1324A2003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004F21D1324A2003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004F31D1324A2003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004F41D1324A2003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC004F51D1324A2003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC004F61D1324A2003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC004F71D1324A2003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC004F81D1324A2003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC004F91D1324A2003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC004FA1D1324A2003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC004FB1D1324A2003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC004FC1D1324A2003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC004FD1D1324AB003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC004FE1D1324AB003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC004FF1D1324AB003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC005001D1324AB003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC005011D1324AB003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC005021D1324AB003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC005031D1324AB003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC005041D1324AB003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC005051D1324AB003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC005061D1324AB003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC005071D1324AB003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC005081D1324AB003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC005091D1324AB003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC0050A1D1324AB003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC0050B1D1324AB003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC0050C1D1324AB003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC0050D1D1324AB003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC0050E1D1324AB003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC0050F1D1324AB003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC005101D1324AB003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC005111D1324AB003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC005121D1324AB003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC005131D1324AB003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC005141D1324AB003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC005151D1324AB003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC005161D1324AB003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC005171D1324AB003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC005181D1324AB003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC005191D1324AB003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC0051A1D1324AB003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC0051B1D1324AB003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC0051C1D1324AB003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC0051D1D1324AB003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC0051E1D1324AB003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC0051F1D1324AB003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC005201D1324B3003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC005211D1324B3003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 7CC003181D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZeroTierSDK_Unity3D_iOS.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC0031A1D1216B0003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC003231D1216E3003E68DC /* ZeroTierSDK_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZeroTierSDK_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC003251D1216E3003E68DC /* ZeroTierSDK_iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZeroTierSDK_iOS.h; sourceTree = ""; }; + 7CC003271D1216E3003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC003301D1216F8003E68DC /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZeroTierSDK_OSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC003321D1216F8003E68DC /* ZeroTierSDK_OSX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZeroTierSDK_OSX.h; sourceTree = ""; }; + 7CC003341D1216F8003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC0033C1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZeroTierSDK_Unity3D_OSX.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC0033E1D121742003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC003421D12178D003E68DC /* SDK_Debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_Debug.c; path = ../../../src/SDK_Debug.c; sourceTree = ""; }; + 7CC003431D12178D003E68DC /* SDK_Debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK_Debug.h; path = ../../../src/SDK_Debug.h; sourceTree = ""; }; + 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_EthernetTap.cpp; path = ../../../src/SDK_EthernetTap.cpp; sourceTree = ""; }; + 7CC003451D12178D003E68DC /* SDK_EthernetTap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_EthernetTap.hpp; path = ../../../src/SDK_EthernetTap.hpp; sourceTree = ""; }; + 7CC003461D12178D003E68DC /* SDK_Intercept.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_Intercept.c; path = ../../../src/SDK_Intercept.c; sourceTree = ""; }; + 7CC003471D12178D003E68DC /* SDK_LWIPStack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_LWIPStack.hpp; path = ../../../src/SDK_LWIPStack.hpp; sourceTree = ""; }; + 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_Proxy.cpp; path = ../../../src/SDK_Proxy.cpp; sourceTree = ""; }; + 7CC003491D12178D003E68DC /* SDK_RPC.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_RPC.c; path = ../../../src/SDK_RPC.c; sourceTree = ""; }; + 7CC0034A1D12178D003E68DC /* SDK_RPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK_RPC.h; path = ../../../src/SDK_RPC.h; sourceTree = ""; }; + 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_ServiceSetup.cpp; path = ../../../src/SDK_ServiceSetup.cpp; sourceTree = ""; }; + 7CC0034C1D12178D003E68DC /* SDK_ServiceSetup.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_ServiceSetup.hpp; path = ../../../src/SDK_ServiceSetup.hpp; sourceTree = ""; }; + 7CC0034D1D12178D003E68DC /* SDK_Signatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK_Signatures.h; path = ../../../src/SDK_Signatures.h; sourceTree = ""; }; + 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_Sockets.c; path = ../../../src/SDK_Sockets.c; sourceTree = ""; }; + 7CC0034F1D12178D003E68DC /* SDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK.h; path = ../../../src/SDK.h; sourceTree = ""; }; + 7CC003571D1217A1003E68DC /* http_parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = http_parser.c; path = "../../../zerotierone/ext/http-parser/http_parser.c"; sourceTree = ""; }; + 7CC003581D1217A1003E68DC /* http_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = http_parser.h; path = "../../../zerotierone/ext/http-parser/http_parser.h"; sourceTree = ""; }; + 7CC0035A1D1217B2003E68DC /* lz4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lz4.c; path = ../../../zerotierone/ext/lz4/lz4.c; sourceTree = ""; }; + 7CC0035B1D1217B2003E68DC /* lz4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lz4.h; path = ../../../zerotierone/ext/lz4/lz4.h; sourceTree = ""; }; + 7CC0035D1D1217C3003E68DC /* api_lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = api_lib.c; path = ../../../ext/lwip/src/api/api_lib.c; sourceTree = ""; }; + 7CC0035E1D1217C3003E68DC /* api_msg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = api_msg.c; path = ../../../ext/lwip/src/api/api_msg.c; sourceTree = ""; }; + 7CC0035F1D1217C3003E68DC /* err.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = err.c; path = ../../../ext/lwip/src/api/err.c; sourceTree = ""; }; + 7CC003601D1217C3003E68DC /* netbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netbuf.c; path = ../../../ext/lwip/src/api/netbuf.c; sourceTree = ""; }; + 7CC003611D1217C3003E68DC /* netdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netdb.c; path = ../../../ext/lwip/src/api/netdb.c; sourceTree = ""; }; + 7CC003621D1217C3003E68DC /* netifapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netifapi.c; path = ../../../ext/lwip/src/api/netifapi.c; sourceTree = ""; }; + 7CC003631D1217C3003E68DC /* sockets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sockets.c; path = ../../../ext/lwip/src/api/sockets.c; sourceTree = ""; }; + 7CC003641D1217C3003E68DC /* tcpip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcpip.c; path = ../../../ext/lwip/src/api/tcpip.c; sourceTree = ""; }; + 7CC0036D1D1217D1003E68DC /* def.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = def.c; path = ../../../ext/lwip/src/core/def.c; sourceTree = ""; }; + 7CC0036E1D1217D1003E68DC /* dhcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dhcp.c; path = ../../../ext/lwip/src/core/dhcp.c; sourceTree = ""; }; + 7CC0036F1D1217D1003E68DC /* dns.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dns.c; path = ../../../ext/lwip/src/core/dns.c; sourceTree = ""; }; + 7CC003701D1217D1003E68DC /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = init.c; path = ../../../ext/lwip/src/core/init.c; sourceTree = ""; }; + 7CC003711D1217D1003E68DC /* mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mem.c; path = ../../../ext/lwip/src/core/mem.c; sourceTree = ""; }; + 7CC003721D1217D1003E68DC /* memp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = memp.c; path = ../../../ext/lwip/src/core/memp.c; sourceTree = ""; }; + 7CC003731D1217D1003E68DC /* netif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netif.c; path = ../../../ext/lwip/src/core/netif.c; sourceTree = ""; }; + 7CC003741D1217D1003E68DC /* pbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pbuf.c; path = ../../../ext/lwip/src/core/pbuf.c; sourceTree = ""; }; + 7CC003751D1217D1003E68DC /* raw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = raw.c; path = ../../../ext/lwip/src/core/raw.c; sourceTree = ""; }; + 7CC003761D1217D1003E68DC /* stats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stats.c; path = ../../../ext/lwip/src/core/stats.c; sourceTree = ""; }; + 7CC003771D1217D1003E68DC /* sys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sys.c; path = ../../../ext/lwip/src/core/sys.c; sourceTree = ""; }; + 7CC003781D1217D1003E68DC /* tcp_in.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcp_in.c; path = ../../../ext/lwip/src/core/tcp_in.c; sourceTree = ""; }; + 7CC003791D1217D1003E68DC /* tcp_out.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcp_out.c; path = ../../../ext/lwip/src/core/tcp_out.c; sourceTree = ""; }; + 7CC0037A1D1217D1003E68DC /* tcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcp.c; path = ../../../ext/lwip/src/core/tcp.c; sourceTree = ""; }; + 7CC0037B1D1217D1003E68DC /* timers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = timers.c; path = ../../../ext/lwip/src/core/timers.c; sourceTree = ""; }; + 7CC0037C1D1217D1003E68DC /* udp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = udp.c; path = ../../../ext/lwip/src/core/udp.c; sourceTree = ""; }; + 7CC0038D1D1217DD003E68DC /* autoip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = autoip.c; path = ../../../ext/lwip/src/core/ipv4/autoip.c; sourceTree = ""; }; + 7CC0038E1D1217DD003E68DC /* icmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = icmp.c; path = ../../../ext/lwip/src/core/ipv4/icmp.c; sourceTree = ""; }; + 7CC0038F1D1217DD003E68DC /* igmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = igmp.c; path = ../../../ext/lwip/src/core/ipv4/igmp.c; sourceTree = ""; }; + 7CC003901D1217DD003E68DC /* inet_chksum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inet_chksum.c; path = ../../../ext/lwip/src/core/ipv4/inet_chksum.c; sourceTree = ""; }; + 7CC003911D1217DD003E68DC /* inet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inet.c; path = ../../../ext/lwip/src/core/ipv4/inet.c; sourceTree = ""; }; + 7CC003921D1217DD003E68DC /* ip_addr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ip_addr.c; path = ../../../ext/lwip/src/core/ipv4/ip_addr.c; sourceTree = ""; }; + 7CC003931D1217DD003E68DC /* ip_frag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ip_frag.c; path = ../../../ext/lwip/src/core/ipv4/ip_frag.c; sourceTree = ""; }; + 7CC003941D1217DD003E68DC /* ip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ip.c; path = ../../../ext/lwip/src/core/ipv4/ip.c; sourceTree = ""; }; + 7CC0039D1D1217F2003E68DC /* etharp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = etharp.c; path = ../../../ext/lwip/src/netif/etharp.c; sourceTree = ""; }; + 7CC0039E1D1217F2003E68DC /* ethernetif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ethernetif.c; path = ../../../ext/lwip/src/netif/ethernetif.c; sourceTree = ""; }; + 7CC0039F1D1217F2003E68DC /* slipif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = slipif.c; path = ../../../ext/lwip/src/netif/slipif.c; sourceTree = ""; }; + 7CC003A31D121800003E68DC /* autoip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = autoip.h; path = ../../../ext/lwip/src/include/ipv4/lwip/autoip.h; sourceTree = ""; }; + 7CC003A41D121800003E68DC /* icmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = icmp.h; path = ../../../ext/lwip/src/include/ipv4/lwip/icmp.h; sourceTree = ""; }; + 7CC003A51D121800003E68DC /* igmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = igmp.h; path = ../../../ext/lwip/src/include/ipv4/lwip/igmp.h; sourceTree = ""; }; + 7CC003A61D121800003E68DC /* inet_chksum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inet_chksum.h; path = ../../../ext/lwip/src/include/ipv4/lwip/inet_chksum.h; sourceTree = ""; }; + 7CC003A71D121800003E68DC /* inet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inet.h; path = ../../../ext/lwip/src/include/ipv4/lwip/inet.h; sourceTree = ""; }; + 7CC003A81D121800003E68DC /* ip_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip_addr.h; path = ../../../ext/lwip/src/include/ipv4/lwip/ip_addr.h; sourceTree = ""; }; + 7CC003A91D121800003E68DC /* ip_frag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip_frag.h; path = ../../../ext/lwip/src/include/ipv4/lwip/ip_frag.h; sourceTree = ""; }; + 7CC003AA1D121800003E68DC /* ip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip.h; path = ../../../ext/lwip/src/include/ipv4/lwip/ip.h; sourceTree = ""; }; + 7CC003AB1D12180E003E68DC /* api_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api_msg.h; path = ../../../ext/lwip/src/include/lwip/api_msg.h; sourceTree = ""; }; + 7CC003AC1D12180E003E68DC /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../../../ext/lwip/src/include/lwip/api.h; sourceTree = ""; }; + 7CC003AD1D12180E003E68DC /* arch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = arch.h; path = ../../../ext/lwip/src/include/lwip/arch.h; sourceTree = ""; }; + 7CC003AE1D12180E003E68DC /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../../../ext/lwip/src/include/lwip/debug.h; sourceTree = ""; }; + 7CC003AF1D12180E003E68DC /* def.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = def.h; path = ../../../ext/lwip/src/include/lwip/def.h; sourceTree = ""; }; + 7CC003B01D12180E003E68DC /* dhcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dhcp.h; path = ../../../ext/lwip/src/include/lwip/dhcp.h; sourceTree = ""; }; + 7CC003B11D12180E003E68DC /* dns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dns.h; path = ../../../ext/lwip/src/include/lwip/dns.h; sourceTree = ""; }; + 7CC003B21D12180E003E68DC /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = err.h; path = ../../../ext/lwip/src/include/lwip/err.h; sourceTree = ""; }; + 7CC003B31D12180E003E68DC /* init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = init.h; path = ../../../ext/lwip/src/include/lwip/init.h; sourceTree = ""; }; + 7CC003B41D12180E003E68DC /* ip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip.h; path = ../../../ext/lwip/src/include/lwip/ip.h; sourceTree = ""; }; + 7CC003B51D12180E003E68DC /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mem.h; path = ../../../ext/lwip/src/include/lwip/mem.h; sourceTree = ""; }; + 7CC003B61D12180E003E68DC /* memp_std.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memp_std.h; path = ../../../ext/lwip/src/include/lwip/memp_std.h; sourceTree = ""; }; + 7CC003B71D12180E003E68DC /* memp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memp.h; path = ../../../ext/lwip/src/include/lwip/memp.h; sourceTree = ""; }; + 7CC003B81D12180E003E68DC /* netbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netbuf.h; path = ../../../ext/lwip/src/include/lwip/netbuf.h; sourceTree = ""; }; + 7CC003B91D12180E003E68DC /* netdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netdb.h; path = ../../../ext/lwip/src/include/lwip/netdb.h; sourceTree = ""; }; + 7CC003BA1D12180E003E68DC /* netif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netif.h; path = ../../../ext/lwip/src/include/lwip/netif.h; sourceTree = ""; }; + 7CC003BB1D12180E003E68DC /* netifapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netifapi.h; path = ../../../ext/lwip/src/include/lwip/netifapi.h; sourceTree = ""; }; + 7CC003BC1D12180E003E68DC /* opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = opt.h; path = ../../../ext/lwip/src/include/lwip/opt.h; sourceTree = ""; }; + 7CC003BD1D12180E003E68DC /* pbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pbuf.h; path = ../../../ext/lwip/src/include/lwip/pbuf.h; sourceTree = ""; }; + 7CC003BE1D12180E003E68DC /* raw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = raw.h; path = ../../../ext/lwip/src/include/lwip/raw.h; sourceTree = ""; }; + 7CC003BF1D12180E003E68DC /* sio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sio.h; path = ../../../ext/lwip/src/include/lwip/sio.h; sourceTree = ""; }; + 7CC003C01D12180E003E68DC /* snmp_asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp_asn1.h; path = ../../../ext/lwip/src/include/lwip/snmp_asn1.h; sourceTree = ""; }; + 7CC003C11D12180E003E68DC /* snmp_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp_msg.h; path = ../../../ext/lwip/src/include/lwip/snmp_msg.h; sourceTree = ""; }; + 7CC003C21D12180E003E68DC /* snmp_structs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp_structs.h; path = ../../../ext/lwip/src/include/lwip/snmp_structs.h; sourceTree = ""; }; + 7CC003C31D12180E003E68DC /* snmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp.h; path = ../../../ext/lwip/src/include/lwip/snmp.h; sourceTree = ""; }; + 7CC003C41D12180E003E68DC /* sockets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sockets.h; path = ../../../ext/lwip/src/include/lwip/sockets.h; sourceTree = ""; }; + 7CC003C51D12180E003E68DC /* stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stats.h; path = ../../../ext/lwip/src/include/lwip/stats.h; sourceTree = ""; }; + 7CC003C61D12180E003E68DC /* sys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sys.h; path = ../../../ext/lwip/src/include/lwip/sys.h; sourceTree = ""; }; + 7CC003C71D12180E003E68DC /* tcp_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcp_impl.h; path = ../../../ext/lwip/src/include/lwip/tcp_impl.h; sourceTree = ""; }; + 7CC003C81D12180E003E68DC /* tcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcp.h; path = ../../../ext/lwip/src/include/lwip/tcp.h; sourceTree = ""; }; + 7CC003C91D12180E003E68DC /* tcpip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcpip.h; path = ../../../ext/lwip/src/include/lwip/tcpip.h; sourceTree = ""; }; + 7CC003CA1D12180E003E68DC /* timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timers.h; path = ../../../ext/lwip/src/include/lwip/timers.h; sourceTree = ""; }; + 7CC003CB1D12180E003E68DC /* udp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = udp.h; path = ../../../ext/lwip/src/include/lwip/udp.h; sourceTree = ""; }; + 7CC003CC1D121833003E68DC /* Arp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Arp.cpp; path = ../../../zerotierone/osdep/Arp.cpp; sourceTree = ""; }; + 7CC003CD1D121833003E68DC /* Arp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Arp.hpp; path = ../../../zerotierone/osdep/Arp.hpp; sourceTree = ""; }; + 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BackgroundResolver.cpp; path = ../../../zerotierone/osdep/BackgroundResolver.cpp; sourceTree = ""; }; + 7CC003CF1D121833003E68DC /* BackgroundResolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = BackgroundResolver.hpp; path = ../../../zerotierone/osdep/BackgroundResolver.hpp; sourceTree = ""; }; + 7CC003D01D121833003E68DC /* Binder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Binder.hpp; path = ../../../zerotierone/osdep/Binder.hpp; sourceTree = ""; }; + 7CC003D11D121833003E68DC /* Http.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Http.cpp; path = ../../../zerotierone/osdep/Http.cpp; sourceTree = ""; }; + 7CC003D21D121833003E68DC /* Http.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Http.hpp; path = ../../../zerotierone/osdep/Http.hpp; sourceTree = ""; }; + 7CC003D31D121833003E68DC /* OSUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OSUtils.cpp; path = ../../../zerotierone/osdep/OSUtils.cpp; sourceTree = ""; }; + 7CC003D41D121833003E68DC /* OSUtils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OSUtils.hpp; path = ../../../zerotierone/osdep/OSUtils.hpp; sourceTree = ""; }; + 7CC003D51D121833003E68DC /* Phy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Phy.hpp; path = ../../../zerotierone/osdep/Phy.hpp; sourceTree = ""; }; + 7CC003D61D121833003E68DC /* PortMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PortMapper.cpp; path = ../../../zerotierone/osdep/PortMapper.cpp; sourceTree = ""; }; + 7CC003D71D121833003E68DC /* PortMapper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = PortMapper.hpp; path = ../../../zerotierone/osdep/PortMapper.hpp; sourceTree = ""; }; + 7CC003D81D121833003E68DC /* RoutingTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RoutingTable.cpp; path = ../../../zerotierone/osdep/RoutingTable.cpp; sourceTree = ""; }; + 7CC003D91D121833003E68DC /* RoutingTable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = RoutingTable.hpp; path = ../../../zerotierone/osdep/RoutingTable.hpp; sourceTree = ""; }; + 7CC003DA1D121833003E68DC /* Thread.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Thread.hpp; path = ../../../zerotierone/osdep/Thread.hpp; sourceTree = ""; }; + 7CC003E11D121840003E68DC /* Address.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Address.hpp; path = ../../../zerotierone/node/Address.hpp; sourceTree = ""; }; + 7CC003E21D121840003E68DC /* Array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Array.hpp; path = ../../../zerotierone/node/Array.hpp; sourceTree = ""; }; + 7CC003E31D121840003E68DC /* AtomicCounter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = AtomicCounter.hpp; path = ../../../zerotierone/node/AtomicCounter.hpp; sourceTree = ""; }; + 7CC003E41D121840003E68DC /* BinarySemaphore.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = BinarySemaphore.hpp; path = ../../../zerotierone/node/BinarySemaphore.hpp; sourceTree = ""; }; + 7CC003E51D121840003E68DC /* Buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Buffer.hpp; path = ../../../zerotierone/node/Buffer.hpp; sourceTree = ""; }; + 7CC003E61D121840003E68DC /* C25519.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = C25519.cpp; path = ../../../zerotierone/node/C25519.cpp; sourceTree = ""; }; + 7CC003E71D121840003E68DC /* C25519.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = C25519.hpp; path = ../../../zerotierone/node/C25519.hpp; sourceTree = ""; }; + 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CertificateOfMembership.cpp; path = ../../../zerotierone/node/CertificateOfMembership.cpp; sourceTree = ""; }; + 7CC003E91D121840003E68DC /* CertificateOfMembership.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CertificateOfMembership.hpp; path = ../../../zerotierone/node/CertificateOfMembership.hpp; sourceTree = ""; }; + 7CC003EA1D121840003E68DC /* Cluster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Cluster.cpp; path = ../../../zerotierone/node/Cluster.cpp; sourceTree = ""; }; + 7CC003EB1D121840003E68DC /* Cluster.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Cluster.hpp; path = ../../../zerotierone/node/Cluster.hpp; sourceTree = ""; }; + 7CC003EC1D121840003E68DC /* Constants.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Constants.hpp; path = ../../../zerotierone/node/Constants.hpp; sourceTree = ""; }; + 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DeferredPackets.cpp; path = ../../../zerotierone/node/DeferredPackets.cpp; sourceTree = ""; }; + 7CC003EE1D121840003E68DC /* DeferredPackets.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DeferredPackets.hpp; path = ../../../zerotierone/node/DeferredPackets.hpp; sourceTree = ""; }; + 7CC003EF1D121840003E68DC /* Dictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Dictionary.cpp; path = ../../../zerotierone/node/Dictionary.cpp; sourceTree = ""; }; + 7CC003F01D121840003E68DC /* Dictionary.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Dictionary.hpp; path = ../../../zerotierone/node/Dictionary.hpp; sourceTree = ""; }; + 7CC003F11D121840003E68DC /* Hashtable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Hashtable.hpp; path = ../../../zerotierone/node/Hashtable.hpp; sourceTree = ""; }; + 7CC003F21D121840003E68DC /* Identity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Identity.cpp; path = ../../../zerotierone/node/Identity.cpp; sourceTree = ""; }; + 7CC003F31D121840003E68DC /* Identity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Identity.hpp; path = ../../../zerotierone/node/Identity.hpp; sourceTree = ""; }; + 7CC003F41D121840003E68DC /* IncomingPacket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IncomingPacket.cpp; path = ../../../zerotierone/node/IncomingPacket.cpp; sourceTree = ""; }; + 7CC003F51D121840003E68DC /* IncomingPacket.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = IncomingPacket.hpp; path = ../../../zerotierone/node/IncomingPacket.hpp; sourceTree = ""; }; + 7CC003F61D121840003E68DC /* InetAddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InetAddress.cpp; path = ../../../zerotierone/node/InetAddress.cpp; sourceTree = ""; }; + 7CC003F71D121840003E68DC /* InetAddress.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = InetAddress.hpp; path = ../../../zerotierone/node/InetAddress.hpp; sourceTree = ""; }; + 7CC003F81D121840003E68DC /* MAC.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = MAC.hpp; path = ../../../zerotierone/node/MAC.hpp; sourceTree = ""; }; + 7CC003F91D121840003E68DC /* Multicaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Multicaster.cpp; path = ../../../zerotierone/node/Multicaster.cpp; sourceTree = ""; }; + 7CC003FA1D121840003E68DC /* Multicaster.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Multicaster.hpp; path = ../../../zerotierone/node/Multicaster.hpp; sourceTree = ""; }; + 7CC003FB1D121840003E68DC /* MulticastGroup.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = MulticastGroup.hpp; path = ../../../zerotierone/node/MulticastGroup.hpp; sourceTree = ""; }; + 7CC003FC1D121840003E68DC /* Mutex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Mutex.hpp; path = ../../../zerotierone/node/Mutex.hpp; sourceTree = ""; }; + 7CC003FD1D121840003E68DC /* Network.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Network.cpp; path = ../../../zerotierone/node/Network.cpp; sourceTree = ""; }; + 7CC003FE1D121840003E68DC /* Network.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Network.hpp; path = ../../../zerotierone/node/Network.hpp; sourceTree = ""; }; + 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkConfig.cpp; path = ../../../zerotierone/node/NetworkConfig.cpp; sourceTree = ""; }; + 7CC004001D121840003E68DC /* NetworkConfig.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NetworkConfig.hpp; path = ../../../zerotierone/node/NetworkConfig.hpp; sourceTree = ""; }; + 7CC004011D121840003E68DC /* NetworkConfigRequestMetaData.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NetworkConfigRequestMetaData.hpp; path = ../../../zerotierone/node/NetworkConfigRequestMetaData.hpp; sourceTree = ""; }; + 7CC004021D121840003E68DC /* NetworkController.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NetworkController.hpp; path = ../../../zerotierone/node/NetworkController.hpp; sourceTree = ""; }; + 7CC004031D121840003E68DC /* Node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Node.cpp; path = ../../../zerotierone/node/Node.cpp; sourceTree = ""; }; + 7CC004041D121840003E68DC /* Node.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Node.hpp; path = ../../../zerotierone/node/Node.hpp; sourceTree = ""; }; + 7CC004051D121840003E68DC /* NonCopyable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NonCopyable.hpp; path = ../../../zerotierone/node/NonCopyable.hpp; sourceTree = ""; }; + 7CC004061D121840003E68DC /* OutboundMulticast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OutboundMulticast.cpp; path = ../../../zerotierone/node/OutboundMulticast.cpp; sourceTree = ""; }; + 7CC004071D121840003E68DC /* OutboundMulticast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OutboundMulticast.hpp; path = ../../../zerotierone/node/OutboundMulticast.hpp; sourceTree = ""; }; + 7CC004081D121840003E68DC /* Packet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Packet.cpp; path = ../../../zerotierone/node/Packet.cpp; sourceTree = ""; }; + 7CC004091D121840003E68DC /* Packet.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Packet.hpp; path = ../../../zerotierone/node/Packet.hpp; sourceTree = ""; }; + 7CC0040A1D121840003E68DC /* Path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Path.cpp; path = ../../../zerotierone/node/Path.cpp; sourceTree = ""; }; + 7CC0040B1D121840003E68DC /* Path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Path.hpp; path = ../../../zerotierone/node/Path.hpp; sourceTree = ""; }; + 7CC0040C1D121840003E68DC /* Peer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Peer.cpp; path = ../../../zerotierone/node/Peer.cpp; sourceTree = ""; }; + 7CC0040D1D121840003E68DC /* Peer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Peer.hpp; path = ../../../zerotierone/node/Peer.hpp; sourceTree = ""; }; + 7CC0040E1D121840003E68DC /* Poly1305.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Poly1305.cpp; path = ../../../zerotierone/node/Poly1305.cpp; sourceTree = ""; }; + 7CC0040F1D121840003E68DC /* Poly1305.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Poly1305.hpp; path = ../../../zerotierone/node/Poly1305.hpp; sourceTree = ""; }; + 7CC004101D121840003E68DC /* RuntimeEnvironment.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = RuntimeEnvironment.hpp; path = ../../../zerotierone/node/RuntimeEnvironment.hpp; sourceTree = ""; }; + 7CC004111D121840003E68DC /* Salsa20.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Salsa20.cpp; path = ../../../zerotierone/node/Salsa20.cpp; sourceTree = ""; }; + 7CC004121D121840003E68DC /* Salsa20.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Salsa20.hpp; path = ../../../zerotierone/node/Salsa20.hpp; sourceTree = ""; }; + 7CC004131D121840003E68DC /* SelfAwareness.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SelfAwareness.cpp; path = ../../../zerotierone/node/SelfAwareness.cpp; sourceTree = ""; }; + 7CC004141D121840003E68DC /* SelfAwareness.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SelfAwareness.hpp; path = ../../../zerotierone/node/SelfAwareness.hpp; sourceTree = ""; }; + 7CC004151D121840003E68DC /* SHA512.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SHA512.cpp; path = ../../../zerotierone/node/SHA512.cpp; sourceTree = ""; }; + 7CC004161D121840003E68DC /* SHA512.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SHA512.hpp; path = ../../../zerotierone/node/SHA512.hpp; sourceTree = ""; }; + 7CC004171D121840003E68DC /* SharedPtr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SharedPtr.hpp; path = ../../../zerotierone/node/SharedPtr.hpp; sourceTree = ""; }; + 7CC004181D121840003E68DC /* Switch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Switch.cpp; path = ../../../zerotierone/node/Switch.cpp; sourceTree = ""; }; + 7CC004191D121840003E68DC /* Switch.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Switch.hpp; path = ../../../zerotierone/node/Switch.hpp; sourceTree = ""; }; + 7CC0041A1D121840003E68DC /* Topology.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Topology.cpp; path = ../../../zerotierone/node/Topology.cpp; sourceTree = ""; }; + 7CC0041B1D121840003E68DC /* Topology.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Topology.hpp; path = ../../../zerotierone/node/Topology.hpp; sourceTree = ""; }; + 7CC0041C1D121840003E68DC /* Utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Utils.cpp; path = ../../../zerotierone/node/Utils.cpp; sourceTree = ""; }; + 7CC0041D1D121840003E68DC /* Utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Utils.hpp; path = ../../../zerotierone/node/Utils.hpp; sourceTree = ""; }; + 7CC0041E1D121840003E68DC /* World.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = World.hpp; path = ../../../zerotierone/node/World.hpp; sourceTree = ""; }; + 7CC004361D12184F003E68DC /* ControlPlane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ControlPlane.cpp; path = ../../../zerotierone/service/ControlPlane.cpp; sourceTree = ""; }; + 7CC004371D12184F003E68DC /* ControlPlane.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlPlane.hpp; path = ../../../zerotierone/service/ControlPlane.hpp; sourceTree = ""; }; + 7CC004381D12184F003E68DC /* OneService.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OneService.cpp; path = ../../../zerotierone/service/OneService.cpp; sourceTree = ""; }; + 7CC004391D12184F003E68DC /* OneService.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OneService.hpp; path = ../../../zerotierone/service/OneService.hpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7CC003151D1216B0003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0031F1D1216E3003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032C1D1216F8003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC003391D121741003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7CC002FB1D12164D003E68DC = { + isa = PBXGroup; + children = ( + 7CC003131D12167D003E68DC /* SDK */, + 7CC003121D121677003E68DC /* ZeroTier */, + 7CC003111D121670003E68DC /* lwIP */, + 7CC003101D12166B003E68DC /* ext */, + 7CC003191D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */, + 7CC003241D1216E3003E68DC /* ZeroTierSDK_iOS */, + 7CC003311D1216F8003E68DC /* ZeroTierSDK_OSX */, + 7CC0033D1D121742003E68DC /* ZeroTierSDK_Unity3D_OSX */, + 7CC003061D12164D003E68DC /* Products */, + ); + sourceTree = ""; + }; + 7CC003061D12164D003E68DC /* Products */ = { + isa = PBXGroup; + children = ( + 7CC003181D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS.bundle */, + 7CC003231D1216E3003E68DC /* ZeroTierSDK_iOS.framework */, + 7CC003301D1216F8003E68DC /* ZeroTierSDK_OSX.framework */, + 7CC0033C1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 7CC003101D12166B003E68DC /* ext */ = { + isa = PBXGroup; + children = ( + 7CC0035A1D1217B2003E68DC /* lz4.c */, + 7CC0035B1D1217B2003E68DC /* lz4.h */, + 7CC003571D1217A1003E68DC /* http_parser.c */, + 7CC003581D1217A1003E68DC /* http_parser.h */, + ); + name = ext; + sourceTree = ""; + }; + 7CC003111D121670003E68DC /* lwIP */ = { + isa = PBXGroup; + children = ( + 7CC003AB1D12180E003E68DC /* api_msg.h */, + 7CC003AC1D12180E003E68DC /* api.h */, + 7CC003AD1D12180E003E68DC /* arch.h */, + 7CC003AE1D12180E003E68DC /* debug.h */, + 7CC003AF1D12180E003E68DC /* def.h */, + 7CC003B01D12180E003E68DC /* dhcp.h */, + 7CC003B11D12180E003E68DC /* dns.h */, + 7CC003B21D12180E003E68DC /* err.h */, + 7CC003B31D12180E003E68DC /* init.h */, + 7CC003B41D12180E003E68DC /* ip.h */, + 7CC003B51D12180E003E68DC /* mem.h */, + 7CC003B61D12180E003E68DC /* memp_std.h */, + 7CC003B71D12180E003E68DC /* memp.h */, + 7CC003B81D12180E003E68DC /* netbuf.h */, + 7CC003B91D12180E003E68DC /* netdb.h */, + 7CC003BA1D12180E003E68DC /* netif.h */, + 7CC003BB1D12180E003E68DC /* netifapi.h */, + 7CC003BC1D12180E003E68DC /* opt.h */, + 7CC003BD1D12180E003E68DC /* pbuf.h */, + 7CC003BE1D12180E003E68DC /* raw.h */, + 7CC003BF1D12180E003E68DC /* sio.h */, + 7CC003C01D12180E003E68DC /* snmp_asn1.h */, + 7CC003C11D12180E003E68DC /* snmp_msg.h */, + 7CC003C21D12180E003E68DC /* snmp_structs.h */, + 7CC003C31D12180E003E68DC /* snmp.h */, + 7CC003C41D12180E003E68DC /* sockets.h */, + 7CC003C51D12180E003E68DC /* stats.h */, + 7CC003C61D12180E003E68DC /* sys.h */, + 7CC003C71D12180E003E68DC /* tcp_impl.h */, + 7CC003C81D12180E003E68DC /* tcp.h */, + 7CC003C91D12180E003E68DC /* tcpip.h */, + 7CC003CA1D12180E003E68DC /* timers.h */, + 7CC003CB1D12180E003E68DC /* udp.h */, + 7CC003A31D121800003E68DC /* autoip.h */, + 7CC003A41D121800003E68DC /* icmp.h */, + 7CC003A51D121800003E68DC /* igmp.h */, + 7CC003A61D121800003E68DC /* inet_chksum.h */, + 7CC003A71D121800003E68DC /* inet.h */, + 7CC003A81D121800003E68DC /* ip_addr.h */, + 7CC003A91D121800003E68DC /* ip_frag.h */, + 7CC003AA1D121800003E68DC /* ip.h */, + 7CC0039D1D1217F2003E68DC /* etharp.c */, + 7CC0039E1D1217F2003E68DC /* ethernetif.c */, + 7CC0039F1D1217F2003E68DC /* slipif.c */, + 7CC0038D1D1217DD003E68DC /* autoip.c */, + 7CC0038E1D1217DD003E68DC /* icmp.c */, + 7CC0038F1D1217DD003E68DC /* igmp.c */, + 7CC003901D1217DD003E68DC /* inet_chksum.c */, + 7CC003911D1217DD003E68DC /* inet.c */, + 7CC003921D1217DD003E68DC /* ip_addr.c */, + 7CC003931D1217DD003E68DC /* ip_frag.c */, + 7CC003941D1217DD003E68DC /* ip.c */, + 7CC0036D1D1217D1003E68DC /* def.c */, + 7CC0036E1D1217D1003E68DC /* dhcp.c */, + 7CC0036F1D1217D1003E68DC /* dns.c */, + 7CC003701D1217D1003E68DC /* init.c */, + 7CC003711D1217D1003E68DC /* mem.c */, + 7CC003721D1217D1003E68DC /* memp.c */, + 7CC003731D1217D1003E68DC /* netif.c */, + 7CC003741D1217D1003E68DC /* pbuf.c */, + 7CC003751D1217D1003E68DC /* raw.c */, + 7CC003761D1217D1003E68DC /* stats.c */, + 7CC003771D1217D1003E68DC /* sys.c */, + 7CC003781D1217D1003E68DC /* tcp_in.c */, + 7CC003791D1217D1003E68DC /* tcp_out.c */, + 7CC0037A1D1217D1003E68DC /* tcp.c */, + 7CC0037B1D1217D1003E68DC /* timers.c */, + 7CC0037C1D1217D1003E68DC /* udp.c */, + 7CC0035D1D1217C3003E68DC /* api_lib.c */, + 7CC0035E1D1217C3003E68DC /* api_msg.c */, + 7CC0035F1D1217C3003E68DC /* err.c */, + 7CC003601D1217C3003E68DC /* netbuf.c */, + 7CC003611D1217C3003E68DC /* netdb.c */, + 7CC003621D1217C3003E68DC /* netifapi.c */, + 7CC003631D1217C3003E68DC /* sockets.c */, + 7CC003641D1217C3003E68DC /* tcpip.c */, + ); + name = lwIP; + sourceTree = ""; + }; + 7CC003121D121677003E68DC /* ZeroTier */ = { + isa = PBXGroup; + children = ( + 7CC004361D12184F003E68DC /* ControlPlane.cpp */, + 7CC004371D12184F003E68DC /* ControlPlane.hpp */, + 7CC004381D12184F003E68DC /* OneService.cpp */, + 7CC004391D12184F003E68DC /* OneService.hpp */, + 7CC003E11D121840003E68DC /* Address.hpp */, + 7CC003E21D121840003E68DC /* Array.hpp */, + 7CC003E31D121840003E68DC /* AtomicCounter.hpp */, + 7CC003E41D121840003E68DC /* BinarySemaphore.hpp */, + 7CC003E51D121840003E68DC /* Buffer.hpp */, + 7CC003E61D121840003E68DC /* C25519.cpp */, + 7CC003E71D121840003E68DC /* C25519.hpp */, + 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */, + 7CC003E91D121840003E68DC /* CertificateOfMembership.hpp */, + 7CC003EA1D121840003E68DC /* Cluster.cpp */, + 7CC003EB1D121840003E68DC /* Cluster.hpp */, + 7CC003EC1D121840003E68DC /* Constants.hpp */, + 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */, + 7CC003EE1D121840003E68DC /* DeferredPackets.hpp */, + 7CC003EF1D121840003E68DC /* Dictionary.cpp */, + 7CC003F01D121840003E68DC /* Dictionary.hpp */, + 7CC003F11D121840003E68DC /* Hashtable.hpp */, + 7CC003F21D121840003E68DC /* Identity.cpp */, + 7CC003F31D121840003E68DC /* Identity.hpp */, + 7CC003F41D121840003E68DC /* IncomingPacket.cpp */, + 7CC003F51D121840003E68DC /* IncomingPacket.hpp */, + 7CC003F61D121840003E68DC /* InetAddress.cpp */, + 7CC003F71D121840003E68DC /* InetAddress.hpp */, + 7CC003F81D121840003E68DC /* MAC.hpp */, + 7CC003F91D121840003E68DC /* Multicaster.cpp */, + 7CC003FA1D121840003E68DC /* Multicaster.hpp */, + 7CC003FB1D121840003E68DC /* MulticastGroup.hpp */, + 7CC003FC1D121840003E68DC /* Mutex.hpp */, + 7CC003FD1D121840003E68DC /* Network.cpp */, + 7CC003FE1D121840003E68DC /* Network.hpp */, + 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */, + 7CC004001D121840003E68DC /* NetworkConfig.hpp */, + 7CC004011D121840003E68DC /* NetworkConfigRequestMetaData.hpp */, + 7CC004021D121840003E68DC /* NetworkController.hpp */, + 7CC004031D121840003E68DC /* Node.cpp */, + 7CC004041D121840003E68DC /* Node.hpp */, + 7CC004051D121840003E68DC /* NonCopyable.hpp */, + 7CC004061D121840003E68DC /* OutboundMulticast.cpp */, + 7CC004071D121840003E68DC /* OutboundMulticast.hpp */, + 7CC004081D121840003E68DC /* Packet.cpp */, + 7CC004091D121840003E68DC /* Packet.hpp */, + 7CC0040A1D121840003E68DC /* Path.cpp */, + 7CC0040B1D121840003E68DC /* Path.hpp */, + 7CC0040C1D121840003E68DC /* Peer.cpp */, + 7CC0040D1D121840003E68DC /* Peer.hpp */, + 7CC0040E1D121840003E68DC /* Poly1305.cpp */, + 7CC0040F1D121840003E68DC /* Poly1305.hpp */, + 7CC004101D121840003E68DC /* RuntimeEnvironment.hpp */, + 7CC004111D121840003E68DC /* Salsa20.cpp */, + 7CC004121D121840003E68DC /* Salsa20.hpp */, + 7CC004131D121840003E68DC /* SelfAwareness.cpp */, + 7CC004141D121840003E68DC /* SelfAwareness.hpp */, + 7CC004151D121840003E68DC /* SHA512.cpp */, + 7CC004161D121840003E68DC /* SHA512.hpp */, + 7CC004171D121840003E68DC /* SharedPtr.hpp */, + 7CC004181D121840003E68DC /* Switch.cpp */, + 7CC004191D121840003E68DC /* Switch.hpp */, + 7CC0041A1D121840003E68DC /* Topology.cpp */, + 7CC0041B1D121840003E68DC /* Topology.hpp */, + 7CC0041C1D121840003E68DC /* Utils.cpp */, + 7CC0041D1D121840003E68DC /* Utils.hpp */, + 7CC0041E1D121840003E68DC /* World.hpp */, + 7CC003CC1D121833003E68DC /* Arp.cpp */, + 7CC003CD1D121833003E68DC /* Arp.hpp */, + 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */, + 7CC003CF1D121833003E68DC /* BackgroundResolver.hpp */, + 7CC003D01D121833003E68DC /* Binder.hpp */, + 7CC003D11D121833003E68DC /* Http.cpp */, + 7CC003D21D121833003E68DC /* Http.hpp */, + 7CC003D31D121833003E68DC /* OSUtils.cpp */, + 7CC003D41D121833003E68DC /* OSUtils.hpp */, + 7CC003D51D121833003E68DC /* Phy.hpp */, + 7CC003D61D121833003E68DC /* PortMapper.cpp */, + 7CC003D71D121833003E68DC /* PortMapper.hpp */, + 7CC003D81D121833003E68DC /* RoutingTable.cpp */, + 7CC003D91D121833003E68DC /* RoutingTable.hpp */, + 7CC003DA1D121833003E68DC /* Thread.hpp */, + ); + name = ZeroTier; + sourceTree = ""; + }; + 7CC003131D12167D003E68DC /* SDK */ = { + isa = PBXGroup; + children = ( + 7CC003421D12178D003E68DC /* SDK_Debug.c */, + 7CC003431D12178D003E68DC /* SDK_Debug.h */, + 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */, + 7CC003451D12178D003E68DC /* SDK_EthernetTap.hpp */, + 7CC003461D12178D003E68DC /* SDK_Intercept.c */, + 7CC003471D12178D003E68DC /* SDK_LWIPStack.hpp */, + 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */, + 7CC003491D12178D003E68DC /* SDK_RPC.c */, + 7CC0034A1D12178D003E68DC /* SDK_RPC.h */, + 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */, + 7CC0034C1D12178D003E68DC /* SDK_ServiceSetup.hpp */, + 7CC0034D1D12178D003E68DC /* SDK_Signatures.h */, + 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */, + 7CC0034F1D12178D003E68DC /* SDK.h */, + ); + name = SDK; + sourceTree = ""; + }; + 7CC003191D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */ = { + isa = PBXGroup; + children = ( + 7CC0031A1D1216B0003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_Unity3D_iOS; + sourceTree = ""; + }; + 7CC003241D1216E3003E68DC /* ZeroTierSDK_iOS */ = { + isa = PBXGroup; + children = ( + 7CC003251D1216E3003E68DC /* ZeroTierSDK_iOS.h */, + 7CC003271D1216E3003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_iOS; + sourceTree = ""; + }; + 7CC003311D1216F8003E68DC /* ZeroTierSDK_OSX */ = { + isa = PBXGroup; + children = ( + 7CC003321D1216F8003E68DC /* ZeroTierSDK_OSX.h */, + 7CC003341D1216F8003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_OSX; + sourceTree = ""; + }; + 7CC0033D1D121742003E68DC /* ZeroTierSDK_Unity3D_OSX */ = { + isa = PBXGroup; + children = ( + 7CC0033E1D121742003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_Unity3D_OSX; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 7CC003201D1216E3003E68DC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC003261D1216E3003E68DC /* ZeroTierSDK_iOS.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032D1D1216F8003E68DC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 7CC003171D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC0031B1D1216B0003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_iOS" */; + buildPhases = ( + 7CC003141D1216B0003E68DC /* Sources */, + 7CC003151D1216B0003E68DC /* Frameworks */, + 7CC003161D1216B0003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_Unity3D_iOS; + productName = ZeroTierSDK_Unity3D_iOS; + productReference = 7CC003181D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 7CC003221D1216E3003E68DC /* ZeroTierSDK_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC003281D1216E3003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_iOS" */; + buildPhases = ( + 7CC0031E1D1216E3003E68DC /* Sources */, + 7CC0031F1D1216E3003E68DC /* Frameworks */, + 7CC003201D1216E3003E68DC /* Headers */, + 7CC003211D1216E3003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_iOS; + productName = ZeroTierSDK_iOS; + productReference = 7CC003231D1216E3003E68DC /* ZeroTierSDK_iOS.framework */; + productType = "com.apple.product-type.framework"; + }; + 7CC0032F1D1216F8003E68DC /* ZeroTierSDK_OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC003351D1216F8003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */; + buildPhases = ( + 7CC0032B1D1216F8003E68DC /* Sources */, + 7CC0032C1D1216F8003E68DC /* Frameworks */, + 7CC0032D1D1216F8003E68DC /* Headers */, + 7CC0032E1D1216F8003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_OSX; + productName = ZeroTierSDK_OSX; + productReference = 7CC003301D1216F8003E68DC /* ZeroTierSDK_OSX.framework */; + productType = "com.apple.product-type.framework"; + }; + 7CC0033B1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC0033F1D121742003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_OSX" */; + buildPhases = ( + 7CC003381D121741003E68DC /* Sources */, + 7CC003391D121741003E68DC /* Frameworks */, + 7CC0033A1D121741003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_Unity3D_OSX; + productName = ZeroTierSDK_Unity3D_OSX; + productReference = 7CC0033C1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7CC002FC1D12164D003E68DC /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0730; + ORGANIZATIONNAME = "ZeroTier Inc."; + TargetAttributes = { + 7CC003171D1216B0003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + 7CC003221D1216E3003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + 7CC0032F1D1216F8003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + 7CC0033B1D121741003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + }; + }; + buildConfigurationList = 7CC002FF1D12164D003E68DC /* Build configuration list for PBXProject "ZeroTierSDK_Apple" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7CC002FB1D12164D003E68DC; + productRefGroup = 7CC003061D12164D003E68DC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7CC003171D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */, + 7CC0033B1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX */, + 7CC003221D1216E3003E68DC /* ZeroTierSDK_iOS */, + 7CC0032F1D1216F8003E68DC /* ZeroTierSDK_OSX */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7CC003161D1216B0003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC003211D1216E3003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032E1D1216F8003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0033A1D121741003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7CC003141D1216B0003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC0038C1D1217D1003E68DC /* udp.c in Sources */, + 7CC003821D1217D1003E68DC /* memp.c in Sources */, + 7CC003661D1217C3003E68DC /* api_msg.c in Sources */, + 7CC004291D121840003E68DC /* NetworkConfig.cpp in Sources */, + 7CC003501D12178D003E68DC /* SDK_Debug.c in Sources */, + 7CC004321D121840003E68DC /* SHA512.cpp in Sources */, + 7CC003531D12178D003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC003961D1217DD003E68DC /* icmp.c in Sources */, + 7CC0037F1D1217D1003E68DC /* dns.c in Sources */, + 7CC004241D121840003E68DC /* Identity.cpp in Sources */, + 7CC004341D121840003E68DC /* Topology.cpp in Sources */, + 7CC0042E1D121840003E68DC /* Peer.cpp in Sources */, + 7CC003871D1217D1003E68DC /* sys.c in Sources */, + 7CC004351D121840003E68DC /* Utils.cpp in Sources */, + 7CC004221D121840003E68DC /* DeferredPackets.cpp in Sources */, + 7CC003841D1217D1003E68DC /* pbuf.c in Sources */, + 7CC003881D1217D1003E68DC /* tcp_in.c in Sources */, + 7CC003671D1217C3003E68DC /* err.c in Sources */, + 7CC003831D1217D1003E68DC /* netif.c in Sources */, + 7CC003971D1217DD003E68DC /* igmp.c in Sources */, + 7CC003A01D1217F2003E68DC /* etharp.c in Sources */, + 7CC003981D1217DD003E68DC /* inet_chksum.c in Sources */, + 7CC0043A1D12184F003E68DC /* ControlPlane.cpp in Sources */, + 7CC003DB1D121833003E68DC /* Arp.cpp in Sources */, + 7CC0042C1D121840003E68DC /* Packet.cpp in Sources */, + 7CC0042A1D121840003E68DC /* Node.cpp in Sources */, + 7CC003651D1217C3003E68DC /* api_lib.c in Sources */, + 7CC0041F1D121840003E68DC /* C25519.cpp in Sources */, + 7CC004211D121840003E68DC /* Cluster.cpp in Sources */, + 7CC003681D1217C3003E68DC /* netbuf.c in Sources */, + 7CC0036B1D1217C3003E68DC /* sockets.c in Sources */, + 7CC0038B1D1217D1003E68DC /* timers.c in Sources */, + 7CC003DF1D121833003E68DC /* PortMapper.cpp in Sources */, + 7CC0039C1D1217DD003E68DC /* ip.c in Sources */, + 7CC004251D121840003E68DC /* IncomingPacket.cpp in Sources */, + 7CC003DC1D121833003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC003A21D1217F2003E68DC /* slipif.c in Sources */, + 7CC0039B1D1217DD003E68DC /* ip_frag.c in Sources */, + 7CC003591D1217A1003E68DC /* http_parser.c in Sources */, + 7CC003861D1217D1003E68DC /* stats.c in Sources */, + 7CC004201D121840003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC0043B1D12184F003E68DC /* OneService.cpp in Sources */, + 7CC0037E1D1217D1003E68DC /* dhcp.c in Sources */, + 7CC003561D12178D003E68DC /* SDK_Sockets.c in Sources */, + 7CC003A11D1217F2003E68DC /* ethernetif.c in Sources */, + 7CC003851D1217D1003E68DC /* raw.c in Sources */, + 7CC003811D1217D1003E68DC /* mem.c in Sources */, + 7CC003DE1D121833003E68DC /* OSUtils.cpp in Sources */, + 7CC003951D1217DD003E68DC /* autoip.c in Sources */, + 7CC004231D121840003E68DC /* Dictionary.cpp in Sources */, + 7CC003551D12178D003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC003891D1217D1003E68DC /* tcp_out.c in Sources */, + 7CC003991D1217DD003E68DC /* inet.c in Sources */, + 7CC0042B1D121840003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC003801D1217D1003E68DC /* init.c in Sources */, + 7CC0038A1D1217D1003E68DC /* tcp.c in Sources */, + 7CC004311D121840003E68DC /* SelfAwareness.cpp in Sources */, + 7CC003511D12178D003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC0036A1D1217C3003E68DC /* netifapi.c in Sources */, + 7CC004261D121840003E68DC /* InetAddress.cpp in Sources */, + 7CC004301D121840003E68DC /* Salsa20.cpp in Sources */, + 7CC004331D121840003E68DC /* Switch.cpp in Sources */, + 7CC0039A1D1217DD003E68DC /* ip_addr.c in Sources */, + 7CC0042D1D121840003E68DC /* Path.cpp in Sources */, + 7CC0035C1D1217B2003E68DC /* lz4.c in Sources */, + 7CC003691D1217C3003E68DC /* netdb.c in Sources */, + 7CC0042F1D121840003E68DC /* Poly1305.cpp in Sources */, + 7CC0036C1D1217C3003E68DC /* tcpip.c in Sources */, + 7CC0037D1D1217D1003E68DC /* def.c in Sources */, + 7CC003541D12178D003E68DC /* SDK_RPC.c in Sources */, + 7CC003DD1D121833003E68DC /* Http.cpp in Sources */, + 7CC004271D121840003E68DC /* Multicaster.cpp in Sources */, + 7CC003521D12178D003E68DC /* SDK_Intercept.c in Sources */, + 7CC004281D121840003E68DC /* Network.cpp in Sources */, + 7CC003E01D121833003E68DC /* RoutingTable.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0031E1D1216E3003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC004851D1318DA003E68DC /* lz4.c in Sources */, + 7CC004861D1318DA003E68DC /* http_parser.c in Sources */, + 7CC004621D131704003E68DC /* etharp.c in Sources */, + 7CC004631D131704003E68DC /* ethernetif.c in Sources */, + 7CC004641D131704003E68DC /* slipif.c in Sources */, + 7CC004651D131704003E68DC /* autoip.c in Sources */, + 7CC004661D131704003E68DC /* icmp.c in Sources */, + 7CC004671D131704003E68DC /* igmp.c in Sources */, + 7CC004681D131704003E68DC /* inet_chksum.c in Sources */, + 7CC004691D131704003E68DC /* inet.c in Sources */, + 7CC0046A1D131704003E68DC /* ip_addr.c in Sources */, + 7CC0046B1D131704003E68DC /* ip_frag.c in Sources */, + 7CC0046C1D131704003E68DC /* ip.c in Sources */, + 7CC0046D1D131704003E68DC /* def.c in Sources */, + 7CC0046E1D131704003E68DC /* dhcp.c in Sources */, + 7CC0046F1D131704003E68DC /* dns.c in Sources */, + 7CC004701D131704003E68DC /* init.c in Sources */, + 7CC004711D131704003E68DC /* mem.c in Sources */, + 7CC004721D131704003E68DC /* memp.c in Sources */, + 7CC004731D131704003E68DC /* netif.c in Sources */, + 7CC004741D131704003E68DC /* pbuf.c in Sources */, + 7CC004751D131704003E68DC /* raw.c in Sources */, + 7CC004761D131704003E68DC /* stats.c in Sources */, + 7CC004771D131704003E68DC /* sys.c in Sources */, + 7CC004781D131704003E68DC /* tcp_in.c in Sources */, + 7CC004791D131704003E68DC /* tcp_out.c in Sources */, + 7CC0047A1D131704003E68DC /* tcp.c in Sources */, + 7CC0047B1D131704003E68DC /* timers.c in Sources */, + 7CC0047C1D131704003E68DC /* udp.c in Sources */, + 7CC0047D1D131704003E68DC /* api_lib.c in Sources */, + 7CC0047E1D131704003E68DC /* api_msg.c in Sources */, + 7CC0047F1D131704003E68DC /* err.c in Sources */, + 7CC004801D131704003E68DC /* netbuf.c in Sources */, + 7CC004811D131704003E68DC /* netdb.c in Sources */, + 7CC004821D131704003E68DC /* netifapi.c in Sources */, + 7CC004831D131704003E68DC /* sockets.c in Sources */, + 7CC004841D131704003E68DC /* tcpip.c in Sources */, + 7CC004431D1316F5003E68DC /* ControlPlane.cpp in Sources */, + 7CC004441D1316F5003E68DC /* OneService.cpp in Sources */, + 7CC004451D1316F5003E68DC /* C25519.cpp in Sources */, + 7CC004461D1316F5003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC004471D1316F5003E68DC /* Cluster.cpp in Sources */, + 7CC004481D1316F5003E68DC /* DeferredPackets.cpp in Sources */, + 7CC004491D1316F5003E68DC /* Dictionary.cpp in Sources */, + 7CC0044A1D1316F5003E68DC /* Identity.cpp in Sources */, + 7CC0044B1D1316F5003E68DC /* IncomingPacket.cpp in Sources */, + 7CC0044C1D1316F5003E68DC /* InetAddress.cpp in Sources */, + 7CC0044D1D1316F5003E68DC /* Multicaster.cpp in Sources */, + 7CC0044E1D1316F5003E68DC /* Network.cpp in Sources */, + 7CC0044F1D1316F5003E68DC /* NetworkConfig.cpp in Sources */, + 7CC004501D1316F5003E68DC /* Node.cpp in Sources */, + 7CC004511D1316F5003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC004521D1316F5003E68DC /* Packet.cpp in Sources */, + 7CC004531D1316F5003E68DC /* Path.cpp in Sources */, + 7CC004541D1316F5003E68DC /* Peer.cpp in Sources */, + 7CC004551D1316F5003E68DC /* Poly1305.cpp in Sources */, + 7CC004561D1316F5003E68DC /* Salsa20.cpp in Sources */, + 7CC004571D1316F5003E68DC /* SelfAwareness.cpp in Sources */, + 7CC004581D1316F5003E68DC /* SHA512.cpp in Sources */, + 7CC004591D1316F5003E68DC /* Switch.cpp in Sources */, + 7CC0045A1D1316F5003E68DC /* Topology.cpp in Sources */, + 7CC0045B1D1316F5003E68DC /* Utils.cpp in Sources */, + 7CC0045C1D1316F5003E68DC /* Arp.cpp in Sources */, + 7CC0045D1D1316F5003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC0045E1D1316F5003E68DC /* Http.cpp in Sources */, + 7CC0045F1D1316F5003E68DC /* OSUtils.cpp in Sources */, + 7CC004601D1316F5003E68DC /* PortMapper.cpp in Sources */, + 7CC004611D1316F5003E68DC /* RoutingTable.cpp in Sources */, + 7CC0043C1D1316BF003E68DC /* SDK_Debug.c in Sources */, + 7CC0043D1D1316BF003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC0043E1D1316BF003E68DC /* SDK_Intercept.c in Sources */, + 7CC0043F1D1316BF003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC004401D1316BF003E68DC /* SDK_RPC.c in Sources */, + 7CC004411D1316BF003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC004421D1316BF003E68DC /* SDK_Sockets.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032B1D1216F8003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC004D21D131F76003E68DC /* ip_addr.c in Sources */, + 7CC004D01D131E37003E68DC /* lz4.c in Sources */, + 7CC004D11D131E37003E68DC /* http_parser.c in Sources */, + 7CC004AD1D131E2D003E68DC /* etharp.c in Sources */, + 7CC004AE1D131E2D003E68DC /* ethernetif.c in Sources */, + 7CC004AF1D131E2D003E68DC /* slipif.c in Sources */, + 7CC004B01D131E2D003E68DC /* autoip.c in Sources */, + 7CC004B11D131E2D003E68DC /* icmp.c in Sources */, + 7CC004B21D131E2D003E68DC /* igmp.c in Sources */, + 7CC004B31D131E2D003E68DC /* inet_chksum.c in Sources */, + 7CC004B41D131E2D003E68DC /* inet.c in Sources */, + 7CC004B61D131E2D003E68DC /* ip_frag.c in Sources */, + 7CC004B71D131E2D003E68DC /* ip.c in Sources */, + 7CC004B81D131E2D003E68DC /* def.c in Sources */, + 7CC004B91D131E2D003E68DC /* dhcp.c in Sources */, + 7CC004BA1D131E2D003E68DC /* dns.c in Sources */, + 7CC004BB1D131E2D003E68DC /* init.c in Sources */, + 7CC004BC1D131E2D003E68DC /* mem.c in Sources */, + 7CC004BD1D131E2D003E68DC /* memp.c in Sources */, + 7CC004BE1D131E2D003E68DC /* netif.c in Sources */, + 7CC004BF1D131E2D003E68DC /* pbuf.c in Sources */, + 7CC004C01D131E2D003E68DC /* raw.c in Sources */, + 7CC004C11D131E2D003E68DC /* stats.c in Sources */, + 7CC004C21D131E2D003E68DC /* sys.c in Sources */, + 7CC004C31D131E2D003E68DC /* tcp_in.c in Sources */, + 7CC004C41D131E2D003E68DC /* tcp_out.c in Sources */, + 7CC004C51D131E2D003E68DC /* tcp.c in Sources */, + 7CC004C61D131E2D003E68DC /* timers.c in Sources */, + 7CC004C71D131E2D003E68DC /* udp.c in Sources */, + 7CC004C81D131E2D003E68DC /* api_lib.c in Sources */, + 7CC004C91D131E2D003E68DC /* api_msg.c in Sources */, + 7CC004CA1D131E2D003E68DC /* err.c in Sources */, + 7CC004CB1D131E2D003E68DC /* netbuf.c in Sources */, + 7CC004CC1D131E2D003E68DC /* netdb.c in Sources */, + 7CC004CD1D131E2D003E68DC /* netifapi.c in Sources */, + 7CC004CE1D131E2D003E68DC /* sockets.c in Sources */, + 7CC004CF1D131E2D003E68DC /* tcpip.c in Sources */, + 7CC004871D131E21003E68DC /* SDK_Debug.c in Sources */, + 7CC004881D131E21003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC004891D131E21003E68DC /* SDK_Intercept.c in Sources */, + 7CC0048A1D131E21003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC0048B1D131E21003E68DC /* SDK_RPC.c in Sources */, + 7CC0048C1D131E21003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC0048D1D131E21003E68DC /* SDK_Sockets.c in Sources */, + 7CC0048E1D131E21003E68DC /* ControlPlane.cpp in Sources */, + 7CC0048F1D131E21003E68DC /* OneService.cpp in Sources */, + 7CC004901D131E21003E68DC /* C25519.cpp in Sources */, + 7CC004911D131E21003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC004921D131E21003E68DC /* Cluster.cpp in Sources */, + 7CC004931D131E21003E68DC /* DeferredPackets.cpp in Sources */, + 7CC004941D131E21003E68DC /* Dictionary.cpp in Sources */, + 7CC004951D131E21003E68DC /* Identity.cpp in Sources */, + 7CC004961D131E21003E68DC /* IncomingPacket.cpp in Sources */, + 7CC004971D131E21003E68DC /* InetAddress.cpp in Sources */, + 7CC004981D131E21003E68DC /* Multicaster.cpp in Sources */, + 7CC004991D131E21003E68DC /* Network.cpp in Sources */, + 7CC0049A1D131E21003E68DC /* NetworkConfig.cpp in Sources */, + 7CC0049B1D131E21003E68DC /* Node.cpp in Sources */, + 7CC0049C1D131E21003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC0049D1D131E21003E68DC /* Packet.cpp in Sources */, + 7CC0049E1D131E21003E68DC /* Path.cpp in Sources */, + 7CC0049F1D131E21003E68DC /* Peer.cpp in Sources */, + 7CC004A01D131E21003E68DC /* Poly1305.cpp in Sources */, + 7CC004A11D131E21003E68DC /* Salsa20.cpp in Sources */, + 7CC004A21D131E21003E68DC /* SelfAwareness.cpp in Sources */, + 7CC004A31D131E21003E68DC /* SHA512.cpp in Sources */, + 7CC004A41D131E21003E68DC /* Switch.cpp in Sources */, + 7CC004A51D131E21003E68DC /* Topology.cpp in Sources */, + 7CC004A61D131E21003E68DC /* Utils.cpp in Sources */, + 7CC004A71D131E21003E68DC /* Arp.cpp in Sources */, + 7CC004A81D131E21003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC004A91D131E21003E68DC /* Http.cpp in Sources */, + 7CC004AA1D131E21003E68DC /* OSUtils.cpp in Sources */, + 7CC004AB1D131E21003E68DC /* PortMapper.cpp in Sources */, + 7CC004AC1D131E21003E68DC /* RoutingTable.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC003381D121741003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC005201D1324B3003E68DC /* lz4.c in Sources */, + 7CC005211D1324B3003E68DC /* http_parser.c in Sources */, + 7CC004FD1D1324AB003E68DC /* etharp.c in Sources */, + 7CC004FE1D1324AB003E68DC /* ethernetif.c in Sources */, + 7CC004FF1D1324AB003E68DC /* slipif.c in Sources */, + 7CC005001D1324AB003E68DC /* autoip.c in Sources */, + 7CC005011D1324AB003E68DC /* icmp.c in Sources */, + 7CC005021D1324AB003E68DC /* igmp.c in Sources */, + 7CC005031D1324AB003E68DC /* inet_chksum.c in Sources */, + 7CC005041D1324AB003E68DC /* inet.c in Sources */, + 7CC005051D1324AB003E68DC /* ip_addr.c in Sources */, + 7CC005061D1324AB003E68DC /* ip_frag.c in Sources */, + 7CC005071D1324AB003E68DC /* ip.c in Sources */, + 7CC005081D1324AB003E68DC /* def.c in Sources */, + 7CC005091D1324AB003E68DC /* dhcp.c in Sources */, + 7CC0050A1D1324AB003E68DC /* dns.c in Sources */, + 7CC0050B1D1324AB003E68DC /* init.c in Sources */, + 7CC0050C1D1324AB003E68DC /* mem.c in Sources */, + 7CC0050D1D1324AB003E68DC /* memp.c in Sources */, + 7CC0050E1D1324AB003E68DC /* netif.c in Sources */, + 7CC0050F1D1324AB003E68DC /* pbuf.c in Sources */, + 7CC005101D1324AB003E68DC /* raw.c in Sources */, + 7CC005111D1324AB003E68DC /* stats.c in Sources */, + 7CC005121D1324AB003E68DC /* sys.c in Sources */, + 7CC005131D1324AB003E68DC /* tcp_in.c in Sources */, + 7CC005141D1324AB003E68DC /* tcp_out.c in Sources */, + 7CC005151D1324AB003E68DC /* tcp.c in Sources */, + 7CC005161D1324AB003E68DC /* timers.c in Sources */, + 7CC005171D1324AB003E68DC /* udp.c in Sources */, + 7CC005181D1324AB003E68DC /* api_lib.c in Sources */, + 7CC005191D1324AB003E68DC /* api_msg.c in Sources */, + 7CC0051A1D1324AB003E68DC /* err.c in Sources */, + 7CC0051B1D1324AB003E68DC /* netbuf.c in Sources */, + 7CC0051C1D1324AB003E68DC /* netdb.c in Sources */, + 7CC0051D1D1324AB003E68DC /* netifapi.c in Sources */, + 7CC0051E1D1324AB003E68DC /* sockets.c in Sources */, + 7CC0051F1D1324AB003E68DC /* tcpip.c in Sources */, + 7CC004DE1D1324A2003E68DC /* ControlPlane.cpp in Sources */, + 7CC004DF1D1324A2003E68DC /* OneService.cpp in Sources */, + 7CC004E01D1324A2003E68DC /* C25519.cpp in Sources */, + 7CC004E11D1324A2003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC004E21D1324A2003E68DC /* Cluster.cpp in Sources */, + 7CC004E31D1324A2003E68DC /* DeferredPackets.cpp in Sources */, + 7CC004E41D1324A2003E68DC /* Dictionary.cpp in Sources */, + 7CC004E51D1324A2003E68DC /* Identity.cpp in Sources */, + 7CC004E61D1324A2003E68DC /* IncomingPacket.cpp in Sources */, + 7CC004E71D1324A2003E68DC /* InetAddress.cpp in Sources */, + 7CC004E81D1324A2003E68DC /* Multicaster.cpp in Sources */, + 7CC004E91D1324A2003E68DC /* Network.cpp in Sources */, + 7CC004EA1D1324A2003E68DC /* NetworkConfig.cpp in Sources */, + 7CC004EB1D1324A2003E68DC /* Node.cpp in Sources */, + 7CC004EC1D1324A2003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC004ED1D1324A2003E68DC /* Packet.cpp in Sources */, + 7CC004EE1D1324A2003E68DC /* Path.cpp in Sources */, + 7CC004EF1D1324A2003E68DC /* Peer.cpp in Sources */, + 7CC004F01D1324A2003E68DC /* Poly1305.cpp in Sources */, + 7CC004F11D1324A2003E68DC /* Salsa20.cpp in Sources */, + 7CC004F21D1324A2003E68DC /* SelfAwareness.cpp in Sources */, + 7CC004F31D1324A2003E68DC /* SHA512.cpp in Sources */, + 7CC004F41D1324A2003E68DC /* Switch.cpp in Sources */, + 7CC004F51D1324A2003E68DC /* Topology.cpp in Sources */, + 7CC004F61D1324A2003E68DC /* Utils.cpp in Sources */, + 7CC004F71D1324A2003E68DC /* Arp.cpp in Sources */, + 7CC004F81D1324A2003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC004F91D1324A2003E68DC /* Http.cpp in Sources */, + 7CC004FA1D1324A2003E68DC /* OSUtils.cpp in Sources */, + 7CC004FB1D1324A2003E68DC /* PortMapper.cpp in Sources */, + 7CC004FC1D1324A2003E68DC /* RoutingTable.cpp in Sources */, + 7CC004D71D13247A003E68DC /* SDK_Debug.c in Sources */, + 7CC004D81D13247A003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC004D91D13247A003E68DC /* SDK_Intercept.c in Sources */, + 7CC004DA1D13247A003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC004DB1D13247A003E68DC /* SDK_RPC.c in Sources */, + 7CC004DC1D13247A003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC004DD1D13247A003E68DC /* SDK_Sockets.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7CC0030B1D12164D003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 7CC0030C1D12164D003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7CC0031C1D1216B0003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7CC0031D1D1216B0003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 7CC003291D1216E3003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../zerotierone", + ); + INFOPLIST_FILE = ZeroTierSDK_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__IOS__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7CC0032A1D1216E3003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../zerotierone", + ); + INFOPLIST_FILE = ZeroTierSDK_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__IOS__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7CC003361D1216F8003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../zerotierone/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + ); + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK", + "-DZT_SDK_DEBUG", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 7CC003371D1216F8003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../zerotierone/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + ); + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK", + "-DZT_SDK_DEBUG", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 7CC003401D121742003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../zerotierone", + "$(SRCROOT)/../../../ext/lwip/src/include/", + ); + INFOPLIST_FILE = ZeroTierSDK_Unity3D_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__UNITY_3D__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7CC003411D121742003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../zerotierone", + "$(SRCROOT)/../../../ext/lwip/src/include/", + ); + INFOPLIST_FILE = ZeroTierSDK_Unity3D_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__UNITY_3D__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7CC002FF1D12164D003E68DC /* Build configuration list for PBXProject "ZeroTierSDK_Apple" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC0030B1D12164D003E68DC /* Debug */, + 7CC0030C1D12164D003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7CC0031B1D1216B0003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC0031C1D1216B0003E68DC /* Debug */, + 7CC0031D1D1216B0003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7CC003281D1216E3003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC003291D1216E3003E68DC /* Debug */, + 7CC0032A1D1216E3003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7CC003351D1216F8003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC003361D1216F8003E68DC /* Debug */, + 7CC003371D1216F8003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7CC0033F1D121742003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC003401D121742003E68DC /* Debug */, + 7CC003411D121742003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7CC002FC1D12164D003E68DC /* Project object */; +} diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..7e32231 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..96f4a97ad2790d144fc1fdb09bbaeee6311ca9a4 GIT binary patch literal 41752 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 n;7rgG{1oXCNs5e(6h@Xs_=x + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme new file mode 100644 index 0000000..2347ba1 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme new file mode 100644 index 0000000..9f39e50 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme new file mode 100644 index 0000000..70130bd --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme new file mode 100644 index 0000000..ac6a8e6 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d7ccf77 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,57 @@ + + + + + SchemeUserState + + ZeroTierSDK_OSX.xcscheme + + orderHint + 3 + + ZeroTierSDK_Unity3D_OSX.xcscheme + + orderHint + 4 + + ZeroTierSDK_Unity3D_iOS.xcscheme + + orderHint + 1 + + ZeroTierSDK_iOS.xcscheme + + orderHint + 2 + + + SuppressBuildableAutocreation + + 7CC003041D12164D003E68DC + + primary + + + 7CC003171D1216B0003E68DC + + primary + + + 7CC003221D1216E3003E68DC + + primary + + + 7CC0032F1D1216F8003E68DC + + primary + + + 7CC0033B1D121741003E68DC + + primary + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist new file mode 100644 index 0000000..44f4d61 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h new file mode 100644 index 0000000..8325739 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h @@ -0,0 +1,19 @@ +// +// ZeroTierSDK_OSX.h +// ZeroTierSDK_OSX +// +// Created by Joseph Henry on 6/15/16. +// Copyright © 2016 ZeroTier Inc. All rights reserved. +// + +#import + +//! Project version number for ZeroTierSDK_OSX. +FOUNDATION_EXPORT double ZeroTierSDK_OSXVersionNumber; + +//! Project version string for ZeroTierSDK_OSX. +FOUNDATION_EXPORT const unsigned char ZeroTierSDK_OSXVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist new file mode 100644 index 0000000..a3ef5c8 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist new file mode 100644 index 0000000..a3ef5c8 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist new file mode 100644 index 0000000..d3de8ee --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h new file mode 100644 index 0000000..65f44c2 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h @@ -0,0 +1,19 @@ +// +// ZeroTierSDK_iOS.h +// ZeroTierSDK_iOS +// +// Created by Joseph Henry on 6/15/16. +// Copyright © 2016 ZeroTier Inc. All rights reserved. +// + +#import + +//! Project version number for ZeroTierSDK_iOS. +FOUNDATION_EXPORT double ZeroTierSDK_iOSVersionNumber; + +//! Project version string for ZeroTierSDK_iOS. +FOUNDATION_EXPORT const unsigned char ZeroTierSDK_iOSVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/integrations/Docker/README.md b/integrations/Docker/README.md index d7a4e4b..bfd4bf1 100644 --- a/integrations/Docker/README.md +++ b/integrations/Docker/README.md @@ -9,7 +9,7 @@ This short tutorial will show you how to enable ZeroTier functionality for your **Step 1: Build the ZeroTier service binaries** -From the ZeroTier source directory, `make netcon` Optionally, if you'd like to see some debug output during execution, use `make netcon NETCON_DEBUG=1` +From the ZeroTier source directory, `make netcon` Optionally, if you'd like to see some debug output during execution, use `make sdk ZT_SDK_DEBUG=1` **Step 2: Build your Docker image** diff --git a/integrations/Unity3D/Assembly-CSharp-Editor.csproj b/integrations/Unity3D/Assembly-CSharp-Editor.csproj new file mode 100644 index 0000000..3287151 --- /dev/null +++ b/integrations/Unity3D/Assembly-CSharp-Editor.csproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD} + Library + Properties + Assembly-CSharp-Editor + v3.5 + 512 + Assets + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_3_5;UNITY_5_3;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_OSX;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_GAMECENTER;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_OSX + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + + + + + + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll + + + + + + + /Users/Joseph/ZeroTier-Unity3D-Test/Library/ScriptAssemblies/Assembly-UnityScript.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Advertisements/Editor/UnityEditor.Advertisements.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/EditorTestsRunner/Editor/nunit.framework.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/EditorTestsRunner/Editor/UnityEditor.EditorTestsRunner.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEditor.Graphs.dll + + + /Applications/Unity/PlaybackEngines/AndroidPlayer/UnityEditor.Android.Extensions.dll + + + /Applications/Unity/PlaybackEngines/iOSSupport/UnityEditor.iOS.Extensions.dll + + + /Applications/Unity/PlaybackEngines/MacStandaloneSupport/UnityEditor.OSXStandalone.Extensions.dll + + + /Applications/Unity/PlaybackEngines/iOSSupport/UnityEditor.iOS.Extensions.Xcode.dll + + + /Applications/Unity/PlaybackEngines/iOSSupport/UnityEditor.iOS.Extensions.Common.dll + + + + + {5AB900A8-5B14-044A-A52D-10417305A5D2} Assembly-CSharp + + + + + diff --git a/integrations/Unity3D/Assembly-CSharp.csproj b/integrations/Unity3D/Assembly-CSharp.csproj new file mode 100644 index 0000000..0f53ec6 --- /dev/null +++ b/integrations/Unity3D/Assembly-CSharp.csproj @@ -0,0 +1,85 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {5AB900A8-5B14-044A-A52D-10417305A5D2} + Library + Properties + Assembly-CSharp + v3.5 + 512 + Assets + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_3_5;UNITY_5_3;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_OSX;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_GAMECENTER;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_OSX + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + + + + + + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll + + + + + + + + + + + + + + + + + + + + + + + + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll + + + + + + diff --git a/integrations/Unity3D/Assets/CameraControl.js b/integrations/Unity3D/Assets/CameraControl.js new file mode 100644 index 0000000..5585fbf --- /dev/null +++ b/integrations/Unity3D/Assets/CameraControl.js @@ -0,0 +1,194 @@ + +var zoomSpeed : float = 3.0f; +var moveSpeed : float = 3.0f; +var rotateSpeed : float = 6.0f; + +var optionalMaterialForSelection : Material; + +// Some internal placeholders +private var orbitVector : GameObject; +private var materialForSelection : Material; +private var selectedObjects = new ArrayList(); +private var selectedObjectsMaterial = new ArrayList(); + +function Start() { + // Create a capsule (which will be the lookAt target and global orbit vector) + orbitVector = GameObject.CreatePrimitive(PrimitiveType.Capsule); + orbitVector.transform.position = Vector3.zero; + // Snap the camera to align with the grid in set starting position (otherwise everything gets a bit wonky) + transform.position = Vector3(4, 4, 4); + // Point the camera towards the capsule + transform.LookAt(orbitVector.transform.position, Vector3.up); + // Hide the capsule (disable the mesh renderer) + orbitVector.GetComponent.().enabled = false; + // Create material to apply for selections (or use material supplied by user) + if (optionalMaterialForSelection) { + materialForSelection = optionalMaterialForSelection; + } else { + materialForSelection = new Material(Shader.Find("Diffuse")); + materialForSelection.color = Color.green; + } +} + +function Update(){ + +orbitVector.transform.position = Vector3.zero; + + if (Input.GetAxis("Mouse ScrollWheel") < 0) { + var currentZoomSpeedin = -10; + transform.Translate(Vector3.forward * ( currentZoomSpeedin)); + } + if (Input.GetAxis("Mouse ScrollWheel") > 0) { + var currentZoomSpeedout = 10; + transform.Translate(Vector3.forward * ( currentZoomSpeedout)); + } +} + +// Call all of our functionality in LateUpdate() to avoid weird behaviour (as seen in Update()) +function LateUpdate() { + // Get mouse vectors + var x = Input.GetAxis("Mouse X"); + var y = Input.GetAxis("Mouse Y"); + + // ALT is pressed, start navigation + //if (Input.GetKey(KeyCode.RightAlt) || Input.GetKey(KeyCode.LeftAlt)) { + + // Distance between camera and orbitVector. We'll need this in a few places + var distanceToOrbit = Vector3.Distance(transform.position, orbitVector.transform.position); + + //RMB - ZOOM + if (Input.GetMouseButton(2)) { + + // Refine the rotateSpeed based on distance to orbitVector + var currentZoomSpeed = Mathf.Clamp(zoomSpeed * (distanceToOrbit / 50), 0.1f, 2.0f); + + // Move the camera in/out + transform.Translate(Vector3.forward * (x * currentZoomSpeed)); + + // If about to collide with the orbitVector, repulse the orbitVector slightly to keep it in front of us + if (Vector3.Distance(transform.position, orbitVector.transform.position) < 3) { + orbitVector.transform.Translate(Vector3.forward, transform); + } + + + //LMB - PIVOT + } else if (Input.GetMouseButton(1)) { + + // Refine the rotateSpeed based on distance to orbitVector + var currentRotateSpeed = Mathf.Clamp(rotateSpeed * (distanceToOrbit / 50), 1.0f, rotateSpeed); + + // Temporarily parent the camera to orbitVector and rotate orbitVector as desired + transform.parent = orbitVector.transform; + orbitVector.transform.Rotate(Vector3.right * (y * currentRotateSpeed)); + orbitVector.transform.Rotate(Vector3.up * (x * currentRotateSpeed), Space.World); + transform.parent = null; + + + //MMB - PAN + } else if (Input.GetMouseButton(0)) { + + // Calculate move speed + var translateX = Vector3.right * (x * moveSpeed) * -1; + var translateY = Vector3.up * (y * moveSpeed) * -1; + + // Move the camera + transform.Translate(translateX); + transform.Translate(translateY); + + // Move the orbitVector with the same values, along the camera's axes. In effect causing it to behave as if temporarily parented. + orbitVector.transform.Translate(translateX, transform); + orbitVector.transform.Translate(translateY, transform); + } + + + /* + // If we're not currently navigating, grab selection if something is clicked + } else if (Input.GetMouseButtonDown(0)) { + var hitInfo : RaycastHit; + var ray : Ray = camera.ScreenPointToRay(Input.mousePosition); + var allowMultiSelect : boolean = false; + + // See if the user is holding in CTRL or SHIFT. If so, enable multiselection + if(Input.GetKey(KeyCode.RightShift) || Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightControl) || Input.GetKey(KeyCode.LeftControl)) { + allowMultiSelect = true; + } + + // Something was clicked. Fetch. + if (Physics.Raycast(ray, hitInfo, camera.farClipPlane)) { + target = hitInfo.transform; + + // If NOT multiselection, remove all prior selections + if (!allowMultiSelect) { + deselectAll(); + } + + //Toggle between selected and unselected (depending on current state) + if (target.renderer.sharedMaterial != materialForSelection) { + selectedObjects.Add(target.gameObject); + selectedObjectsMaterial.Add(target.gameObject.renderer.sharedMaterial); + target.gameObject.renderer.sharedMaterial = materialForSelection; + + } else { + var arrayLocation : int = selectedObjects.IndexOf(target.gameObject); + if (arrayLocation == -1) {return;}; //this shouldn't happen. Ever. But still. + + target.gameObject.renderer.sharedMaterial = selectedObjectsMaterial[arrayLocation]; + selectedObjects.RemoveAt(arrayLocation); + selectedObjectsMaterial.RemoveAt(arrayLocation); + + } + + // Else deselect all selected objects (ie. click on empty background) + } else { + + // Don't deselect if allowMultiSelect is true + if (!allowMultiSelect) {deselectAll();}; + } + + + + // Fetch input of the F-button (focus) -- this is a very dodgy implementation... + } else if (Input.GetKeyDown("f")) { + var backtrack = Vector3(0, 0, -15); + var selectedObject : GameObject; + + // If dealing with only one selected object + if (selectedObjects.Count == 1) { + selectedObject = selectedObjects[0]; + transform.position = selectedObject.transform.position; + orbitVector.transform.position = selectedObject.transform.position; + transform.Translate(backtrack); + + // Else we need to average out the position vectors (this is the proper dodgy part of the implementation) + } else if (selectedObjects.Count > 1) { + selectedObject = selectedObjects[0]; + var average = selectedObject.transform.position; + + for (var i = 1; i < selectedObjects.Count; i++) { + selectedObject = selectedObjects[i]; + average = (average + selectedObject.transform.position) / 2; + } + + transform.position = average; + orbitVector.transform.position = average; + transform.Translate(backtrack); + } + } + */ +} + + + +// Function to handle the de-selection of all objects in scene +function deselectAll() { + + // Run through the list of selected objects and restore their original materials + for (var currentItem = 0; currentItem < selectedObjects.Count; currentItem++) { + var selectedObject : GameObject = selectedObjects[currentItem]; + selectedObject.GetComponent.().sharedMaterial = selectedObjectsMaterial[currentItem]; + } + + // Clear both arrays + selectedObjects.Clear(); + selectedObjectsMaterial.Clear(); +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/Demo.cs b/integrations/Unity3D/Assets/Demo.cs new file mode 100644 index 0000000..72b8032 --- /dev/null +++ b/integrations/Unity3D/Assets/Demo.cs @@ -0,0 +1,90 @@ +using UnityEngine; +using System.Collections; +using System.Threading; +using System.Runtime.Serialization.Formatters.Binary; +using System.IO; + +public class Demo : MonoBehaviour +{ + public float speed = 300f; + + private ZeroTierNetworkInterface zt; + string nwid = ""; + + private void zt_sample_network_test_thread() + { + print("test_network"); + + byte error; + // Prepare sample data buffer + /* + byte[] buffer = new byte[1024]; + Stream stream = new MemoryStream(buffer); + BinaryFormatter f = new BinaryFormatter(); + f.Serialize ( stream , "Welcome to the machine! (from Unity3D)" ); + int error; + */ + + // Connect to server + int connfd = zt.Connect (0, "172.22.211.245", 8888, out error); + print(connfd); + + // Send sample data to server + //int bytes_written = zt.Send(connfd,buffer,0, out error); + //print(bytes_written); + + char[] buffer = new char[1024]; + buffer = "hello".ToCharArray(); + //print (buffer); + //Stream stream = new MemoryStream(buffer); + //BinaryFormatter formatter = new BinaryFormatter(); + //formatter.Serialize(stream, "HelloServer"); + //int bufferSize = 1024; + + int bytes_written = zt.Send(connfd, "hello".ToCharArray(),4, out error); + print(bytes_written); + } + + public void zt_test_network() + { + Thread networkTestThread = new Thread(() => { zt_sample_network_test_thread();}); + networkTestThread.IsBackground = true; + networkTestThread.Start(); + } + + void Start() + { + // Create new instance of ZeroTier in separate thread + zt = new ZeroTierNetworkInterface ("/Users/Joseph/utest2"); + + /* This new instance will communicate via a named pipe, so any + * API calls (ZeroTier.Connect(), ZeroTier.Send(), etc) will be sent to the service + * via this pipe. + */ + } + + // Terminate the ZeroTier service when the application quits + void OnApplicationQuit() { + zt.Terminate (); + } + + // Update is called once per frame + void Update () { + + // Rotate ZTCube when ZT is running + /* + if (zt.IsRunning ()) { + GameObject go = GameObject.Find ("ZTCube"); + Vector3 rotvec = new Vector3 (10f, 10f, 10f); + go.transform.Rotate (rotvec, speed * Time.deltaTime); + } + */ + /* + GameObject go = GameObject.Find("ZTCube"); + Text text = go.GetComponents ()[0]; + if (text) { + text.text = IsRunning() ? "ZeroTier Status: Online" : "ZeroTier Status: Offline"; + } + */ + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/MainScene.unity b/integrations/Unity3D/Assets/MainScene.unity new file mode 100644 index 0000000000000000000000000000000000000000..e1f3e570f8b60afa0fa87a9651caed2c9ab1d11c GIT binary patch literal 67160 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 + } + + //------------------------------------------------------------------------------------------------------------ + private void OnGUI() + { + m_MeshFilter = (MeshFilter)EditorGUILayout.ObjectField("MeshFilter", m_MeshFilter, typeof(MeshFilter), true); + + if (m_MeshFilter != null) + { + if (GUILayout.Button("Export OBJ")) + { + var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_MeshFilter.name + ".obj", "obj"); + + if (File.Exists(lOutputPath)) + { + File.Delete(lOutputPath); + } + + var lStream = new FileStream(lOutputPath, FileMode.Create); + var lOBJData = m_MeshFilter.sharedMesh.EncodeOBJ(); + OBJLoader.ExportOBJ(lOBJData, lStream); + lStream.Close(); + } + } + else + { + GUILayout.Label("Please provide a MeshFilter"); + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs.meta new file mode 100644 index 0000000..edb50dc --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5cb377fb273c8634296cc421905b1d34 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples.meta new file mode 100644 index 0000000..b32fe9f --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 85a0cef7e364f48d881582114249bfd1 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes.meta new file mode 100644 index 0000000..e270850 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1cec0b7c513af4f2985399042ae83c15 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials.meta new file mode 100644 index 0000000..acf9487 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d2f76706cb1d54b54801e02c996080eb +folderAsset: yes +timeCreated: 1465591253 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat new file mode 100644 index 0000000000000000000000000000000000000000..30be4872d7136b6ea947bf214370335cbba85e9f GIT binary patch literal 4904 zcmeI0OKjX!6o${tWRf)HRZ3|~DGl%PN?S^Jh9=FcEzOXWv<0y-&dkk>!DC0Zr%WUk zULnDr72Q-wY$_qdiVX`SHb}5Sh(&oU+ika~YWV+a&&}LPq>BBV=*0Ja_xSicZ0mYN zhJO^j!UL-`BqJ!Q#y;`!DaUfEBSg zh$H0{krehDdXkD1@b`5|((ekA4gk_mrUlu7@$cYw;aJq1)w1y&Jl90B{>J%522jzG`t}2At#{BmrCi)_ioKH-W}&XhG%h}!kqD-Tey<8x8h_A zw~KQZxmG*Q`wh?f^&aNTYd4g_+OeJujL9D$gpl6^{{&;k!+T`Acpfy|uG?O629K!l^*X>Edl)NmT zW7MhJQ-%-fdVY^N<9XWfA?vz)&a!-mt?NERu65X|=d*^F}pY7qi82v2dyy7M*@?2k*mXc^m-DJU7hH-ZaGNSSCnMQX(ux#MtGd3D zwya~kxVjo^U-N$GCOVMN52IKjsmqGEEQrYH&QTt;94=*BjXk)*G|(3LBDW_-A{B?N zsH);4Ek^IGv^+oY0!Ouz$Te2|LB9h13iK<`uRy;7{R;g53h>i#rnRD+GeMlVK~*_N zv1`e;P284ugrDBr0&~6t%5Ak%alHUL1hP#@v1_DeqV1+z%{6XAEV1plEpuj7;(Gqu zVbpZ}JJ|Cx1G}ck^?kQ}2U~u2JB!t--{QV&i!oO1ShVlCrWbE(Zrk!FfIRMs8-IjZ zx7fB_IiB=aR4v>Rifz9OuAB;L;`?6plpn_NmJ?uMpTpSMA7?qLPW#voVoV#&X5(a& z2|mtXH`7YO)m0j0Hl3ORjQsJ{gtmGA-N;K6NII$W)vv_lake$ocD%1P zYrdRBDySz7nx~We8KJk==2Wcn=N#w4#bs5cz2Kt(^GaA_1QeZ1r!E=NKQZxV6sOa- W8E!=LMRUk~=WDZYm@;NC>fF!vcv7608tnQ69^7+byaZ{{PPS#@De_vG<8i=icw0IddK}(>oR! z`B7wlQAF+*xd#W4$*~h-lN%FqYkPY;lL0sY{ru{+qc^V|YF~eU`NoyQmk*Y}vREwO zNO@T#hW)ml#3C8|eU+2=yNtv`fb^4SM)qL*JNO+qW;LgER{n;MW0=!E*Tu)+=PArb z(luK1?~|;=Kc#;1UH0967++$Ym2N-7hG*mq{C^EUjGx!Y#5^aPnLs>La>ksQAA{0k1=LEyhr-QbHCws-42pNSkGhV zBkM*#hX`ZxA>EfRQhwO*yp`_*;7Ps(t1m~$wHBb&rB4*R}mWMEe=~ zvieTHC!wb5e-(${ro-};ex-OryB;OJ1x=)j99kJ^9jNy6t0b|yaHGURKVcot(e}Bf9 z_x^K)kc2`E`ayTcadDHoiE>`3D3(#M8JIc?mPn(DPpal>+mmTtixGori%8Rb2&dy`7;zV@} zwB2gmsj7g>$;b@OsjZLvpc(=!xwU%Ka5fh`r^fkQD~$Zc+p38(&$m=dNf-rgv$p2c zO3tQSXu8qXO5ks*Alh23D;3eHb4gWG=qh?yQ|*Q3rBIqqLnY@VBw31Df#PWu$5Yal zEsU2pHbU)d(es^12jY8v5K165Sr>-|5h?C1@}Q-dOST#ZaD!=}Ez(79PmBaA^jkqi zg~wZrzP#RYy~u5rRXYkCV>K8IDln+PpaO#m3@R|F!2hoRx9e-l+4Q6F@d@l#_}?+N z;~n8AH@Ci=?}2hVT`oCp6FUR49f`49q$Z;6W?PL-Za*xs?YJE)&#TCBy|?_J;dr;P zXS~=g1&-%A?c3P$bGy7;sdz2!w{{t0)s98`UTC;sUvt}*pZ;mwB`5q4vu?3%yK+3` zt*ffPD-_#)A6%77sEOyfmD8RdhPzIHg?$cVXMf78L1os%J`iKtXf_{4J52CV2D`ad zH4d+!8pq(I_nov)6?ZK^QT=Z)guGJBkC3AG)6YS^jyY80qu zEvnNzp61U7y}dT4Vx2$ZlrLOdRTbI`J{B-9`Bg?h(YbW$k|6!l5`R7^cltKR4QRS( R4yo^S?blzHraQ{G{sSMZ9E$(| literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat.meta new file mode 100644 index 0000000..2cc6f76 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: de5cfcc17119041818768dc28e0c3e4b +timeCreated: 1465591253 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat new file mode 100644 index 0000000000000000000000000000000000000000..34de0ddaa6fc5e16d19ed6e5e7d49fa308539572 GIT binary patch literal 4908 zcmeI0OKjX!6o$`CGD({9Dy6igl!o^!qzNTFOOxi+hGs}g(t_9+XXYkj@Ys> zS4gmDMK=`^n@R|=V#5N74HB#nVo@H;cH1qg8vg&EZ)3w`0~LrSP_eT zI8t5_NnyXGC#gsQe_!`V`dvZNUO@WEv>xU<{%)1CQF8gA!%njF%Z z?-XH5Zs$8~xSj8e;dZ{W;Jf8JN3PY*m%pPKFUdtjzQ9mXb!Kcv{8v zl{94&hZ5hkOfW6pdK zCvH$t&M3An`af@O&0E6PZ*GG*-vi~=+9|tUfL#LFwxrlOQZvzZQ;qrtw<4CAo~oxL`vVx6CKoC_D1RfYC~7YEGCVU-b3bS|yBWJrHz c;-?g+)wgMGM)O5;$bIK)zy7i?(Nf0sA0i(h(EtDd literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat.meta new file mode 100644 index 0000000..1bfa660 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c4a7e93244894f7ea111b89b950bb85 +timeCreated: 1465591814 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj new file mode 100644 index 0000000..c4e58e1 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj @@ -0,0 +1,2354 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 06.03.2014 21:07:42 + +# +# object Teapot001 +# + +v 17.3454 -6.9354 33.2189 +v 18.7821 0.3405 33.2189 +v 19.0443 0.3405 32.2275 +v 17.5874 -7.0383 32.2275 +v 17.6261 -7.0548 33.5494 +v 19.0863 0.3405 33.5494 +v 18.1971 -7.2977 33.2189 +v 19.7053 0.3405 33.2189 +v 18.8261 -7.5654 32.2275 +v 20.3872 0.3405 32.2275 +v 13.4063 -12.8209 33.2189 +v 13.5925 -13.0071 32.2275 +v 13.6223 -13.0369 33.5494 +v 14.0618 -13.4764 33.2189 +v 14.5459 -13.9605 32.2275 +v 7.5208 -16.7600 33.2189 +v 7.6237 -17.0020 32.2275 +v 7.6402 -17.0407 33.5494 +v 7.8831 -17.6117 33.2189 +v 8.1508 -18.2407 32.2275 +v 0.2449 -18.1967 33.2189 +v 0.2449 -18.4589 32.2275 +v 0.2449 -18.5009 33.5494 +v 0.2449 -19.1199 33.2189 +v 0.2449 -19.8018 32.2275 +v -7.2460 -16.7600 33.2189 +v -7.6437 -17.0020 32.2275 +v -7.2140 -17.0407 33.5494 +v -7.4012 -17.6117 33.2189 +v -7.6609 -18.2407 32.2275 +v -13.1076 -12.8209 33.2189 +v -13.5558 -13.0071 32.2275 +v -13.1891 -13.0369 33.5494 +v -13.5790 -13.4764 33.2189 +v -14.0560 -13.9605 32.2275 +v -16.9272 -6.9354 33.2189 +v -17.2674 -7.0383 32.2275 +v -17.1574 -7.0548 33.5494 +v -17.7098 -7.2977 33.2189 +v -18.3362 -7.5654 32.2275 +v -18.2922 0.3405 33.2189 +v -18.5544 0.3405 32.2275 +v -18.5964 0.3405 33.5494 +v -19.2154 0.3405 33.2189 +v -19.8973 0.3405 32.2275 +v -16.8556 7.6163 33.2189 +v -17.0975 7.7192 32.2275 +v -17.1362 7.7357 33.5494 +v -17.7072 7.9786 33.2189 +v -18.3362 8.2463 32.2275 +v -12.9164 13.5018 33.2189 +v -13.1026 13.6880 32.2275 +v -13.1324 13.7178 33.5494 +v -13.5719 14.1573 33.2189 +v -14.0560 14.6414 32.2275 +v -7.0309 17.4410 33.2189 +v -7.1338 17.6829 32.2275 +v -7.1503 17.7216 33.5494 +v -7.3932 18.2926 33.2189 +v -7.6609 18.9216 32.2275 +v 0.2449 18.8776 33.2189 +v 0.2449 19.1399 32.2275 +v 0.2449 19.1818 33.5494 +v 0.2449 19.8008 33.2189 +v 0.2449 20.4827 32.2275 +v 7.5208 17.4410 33.2189 +v 7.6237 17.6829 32.2275 +v 7.6402 17.7216 33.5494 +v 7.8831 18.2926 33.2189 +v 8.1508 18.9216 32.2275 +v 13.4063 13.5018 33.2189 +v 13.5925 13.6880 32.2275 +v 13.6223 13.7178 33.5494 +v 14.0618 14.1573 33.2189 +v 14.5459 14.6414 32.2275 +v 17.3455 7.6163 33.2189 +v 17.5874 7.7192 32.2275 +v 17.6261 7.7357 33.5494 +v 18.1971 7.9786 33.2189 +v 18.8261 8.2463 32.2275 +v 21.1004 -8.5330 26.9559 +v 22.8525 0.3405 26.9559 +v 23.0843 -9.3771 21.7788 +v 25.0031 0.3405 21.7788 +v 24.4876 -9.9742 16.7904 +v 26.5242 0.3405 16.7904 +v 25.0199 -10.2006 12.0853 +v 27.1012 0.3405 12.0853 +v 16.2963 -15.7109 26.9559 +v 17.8232 -17.2378 21.7788 +v 18.9032 -18.3178 16.7904 +v 19.3129 -18.7275 12.0853 +v 9.1184 -20.5150 26.9559 +v 9.9625 -22.4989 21.7788 +v 10.5596 -23.9022 16.7904 +v 10.7860 -24.4345 12.0853 +v 0.2449 -22.2671 26.9559 +v 0.2449 -24.4177 21.7788 +v 0.2449 -25.9388 16.7904 +v 0.2449 -26.5158 12.0853 +v -8.6285 -20.5150 26.9559 +v -9.4726 -22.4989 21.7788 +v -10.0697 -23.9022 16.7904 +v -10.2961 -24.4345 12.0853 +v -15.8064 -15.7109 26.9559 +v -17.3333 -17.2378 21.7788 +v -18.4133 -18.3178 16.7904 +v -18.8230 -18.7275 12.0853 +v -20.6105 -8.5330 26.9559 +v -22.5944 -9.3771 21.7788 +v -23.9977 -9.9742 16.7904 +v -24.5300 -10.2006 12.0853 +v -22.3626 0.3405 26.9559 +v -24.5132 0.3405 21.7788 +v -26.0343 0.3405 16.7904 +v -26.6113 0.3405 12.0853 +v -20.6105 9.2139 26.9559 +v -22.5944 10.0580 21.7788 +v -23.9977 10.6551 16.7904 +v -24.5300 10.8815 12.0853 +v -15.8064 16.3918 26.9559 +v -17.3333 17.9187 21.7788 +v -18.4133 18.9988 16.7904 +v -18.8230 19.4084 12.0853 +v -8.6285 21.1959 26.9559 +v -9.4726 23.1798 21.7788 +v -10.0697 24.5831 16.7904 +v -10.2961 25.1154 12.0853 +v 0.2449 22.9480 26.9559 +v 0.2449 25.0986 21.7788 +v 0.2449 26.6197 16.7904 +v 0.2449 27.1967 12.0853 +v 9.1184 21.1959 26.9559 +v 9.9625 23.1798 21.7788 +v 10.5596 24.5831 16.7904 +v 10.7860 25.1154 12.0853 +v 16.2963 16.3918 26.9559 +v 17.8232 17.9187 21.7788 +v 18.9032 18.9988 16.7904 +v 19.3129 19.4084 12.0853 +v 21.1004 9.2139 26.9559 +v 23.0843 10.0580 21.7788 +v 24.4876 10.6551 16.7904 +v 25.0199 10.8815 12.0853 +v 24.0521 -9.7889 8.1041 +v 26.0522 0.3405 8.1041 +v 21.9230 -8.8830 5.1614 +v 23.7442 0.3405 5.1614 +v 19.7939 -7.9771 3.1630 +v 21.4362 0.3405 3.1630 +v 18.8261 -7.5654 2.0142 +v 20.3872 0.3405 2.0142 +v 18.5681 -17.9827 8.1041 +v 16.9294 -16.3440 5.1614 +v 15.2908 -14.7054 3.1630 +v 14.5459 -13.9605 2.0142 +v 10.3743 -23.4667 8.1041 +v 9.4684 -21.3376 5.1614 +v 8.5625 -19.2085 3.1630 +v 8.1508 -18.2407 2.0142 +v 0.2449 -25.4668 8.1041 +v 0.2449 -23.1588 5.1614 +v 0.2449 -20.8508 3.1630 +v 0.2449 -19.8018 2.0142 +v -9.8844 -23.4667 8.1041 +v -8.9785 -21.3376 5.1614 +v -8.0726 -19.2085 3.1630 +v -7.6609 -18.2407 2.0142 +v -18.0782 -17.9827 8.1041 +v -16.4395 -16.3440 5.1614 +v -14.8009 -14.7054 3.1630 +v -14.0560 -13.9605 2.0142 +v -23.5622 -9.7889 8.1041 +v -21.4331 -8.8830 5.1614 +v -19.3040 -7.9771 3.1630 +v -18.3362 -7.5654 2.0142 +v -25.5623 0.3405 8.1041 +v -23.2543 0.3405 5.1614 +v -20.9463 0.3405 3.1630 +v -19.8973 0.3405 2.0142 +v -23.5622 10.4698 8.1041 +v -21.4331 9.5639 5.1614 +v -19.3040 8.6580 3.1630 +v -18.3362 8.2463 2.0142 +v -18.0782 18.6636 8.1041 +v -16.4395 17.0249 5.1614 +v -14.8009 15.3863 3.1630 +v -14.0560 14.6414 2.0142 +v -9.8844 24.1476 8.1041 +v -8.9785 22.0185 5.1614 +v -8.0726 19.8894 3.1630 +v -7.6609 18.9216 2.0142 +v 0.2449 26.1477 8.1041 +v 0.2449 23.8397 5.1614 +v 0.2449 21.5317 3.1630 +v 0.2449 20.4827 2.0142 +v 10.3743 24.1476 8.1041 +v 9.4684 22.0185 5.1614 +v 8.5625 19.8894 3.1630 +v 8.1508 18.9216 2.0142 +v 18.5681 18.6636 8.1041 +v 16.9294 17.0249 5.1614 +v 15.2908 15.3863 3.1630 +v 14.5459 14.6414 2.0142 +v 24.0521 10.4698 8.1041 +v 21.9230 9.5639 5.1614 +v 19.7939 8.6580 3.1630 +v 18.8261 8.2463 2.0142 +v 18.4052 -7.3862 1.2746 +v 19.9308 0.3405 1.2746 +v 16.1551 -6.4289 0.6294 +v 17.4917 0.3405 0.6294 +v 10.5953 -4.0633 0.1731 +v 11.4648 0.3405 0.1731 +v 0.2449 0.3405 0.0000 +v 14.2219 -13.6365 1.2746 +v 12.4902 -11.9048 0.6294 +v 8.2110 -7.6256 0.1731 +v 7.9717 -17.8198 1.2746 +v 7.0143 -15.5697 0.6294 +v 4.6487 -10.0098 0.1731 +v 0.2449 -19.3454 1.2746 +v 0.2449 -16.9063 0.6294 +v 0.2449 -10.8794 0.1731 +v -7.4818 -17.8198 1.2746 +v -6.5244 -15.5697 0.6294 +v -4.1588 -10.0098 0.1731 +v -13.7320 -13.6365 1.2746 +v -12.0003 -11.9048 0.6294 +v -7.7211 -7.6256 0.1731 +v -17.9153 -7.3862 1.2746 +v -15.6652 -6.4289 0.6294 +v -10.1054 -4.0633 0.1731 +v -19.4409 0.3405 1.2746 +v -17.0018 0.3405 0.6294 +v -10.9749 0.3405 0.1731 +v -17.9153 8.0672 1.2746 +v -15.6652 7.1098 0.6294 +v -10.1054 4.7442 0.1731 +v -13.7320 14.3174 1.2746 +v -12.0003 12.5857 0.6294 +v -7.7211 8.3065 0.1731 +v -7.4818 18.5007 1.2746 +v -6.5244 16.2506 0.6294 +v -4.1588 10.6908 0.1731 +v 0.2449 20.0263 1.2746 +v 0.2449 17.5872 0.6294 +v 0.2449 11.5603 0.1731 +v 7.9717 18.5007 1.2746 +v 7.0143 16.2506 0.6294 +v 4.6487 10.6908 0.1731 +v 14.2219 14.3174 1.2746 +v 12.4902 12.5857 0.6294 +v 8.2110 8.3065 0.1731 +v 18.4052 8.0672 1.2746 +v 16.1551 7.1098 0.6294 +v 10.5953 4.7442 0.1731 +v -27.7004 -1.9255 27.6095 +v -27.5135 0.3405 27.1448 +v -21.2401 0.3405 27.1920 +v -21.0303 -1.9255 27.6641 +v -32.5963 -1.9255 27.2274 +v -32.1504 0.3405 26.8143 +v -35.6117 -1.9255 26.1903 +v -35.0249 0.3405 25.9174 +v -36.6405 -1.9255 24.1707 +v -36.0110 0.3405 24.1707 +v -28.1115 -2.6809 28.6318 +v -20.5687 -2.6809 28.7027 +v -33.5772 -2.6809 28.1362 +v -36.9027 -2.6809 26.7907 +v -38.0252 -2.6809 24.1707 +v -28.5226 -1.9255 29.6542 +v -20.1071 -1.9255 29.7412 +v -34.5581 -1.9255 29.0449 +v -38.1938 -1.9255 27.3911 +v -39.4100 -1.9255 24.1707 +v -28.7095 0.3405 30.1189 +v -19.8973 0.3405 30.2133 +v -35.0039 0.3405 29.4580 +v -38.7806 0.3405 27.6641 +v -40.0395 0.3405 24.1707 +v -28.5226 2.6065 29.6542 +v -20.1071 2.6065 29.7412 +v -34.5581 2.6065 29.0449 +v -38.1938 2.6065 27.3911 +v -39.4100 2.6065 24.1707 +v -28.1115 3.3618 28.6318 +v -20.5687 3.3618 28.7027 +v -33.5772 3.3618 28.1362 +v -36.9027 3.3618 26.7907 +v -38.0253 3.3618 24.1707 +v -27.7004 2.6065 27.6095 +v -21.0303 2.6065 27.6641 +v -32.5963 2.6065 27.2274 +v -35.6117 2.6065 26.1903 +v -36.6405 2.6065 24.1707 +v -36.0586 -1.9255 21.1683 +v -35.4865 0.3405 21.4326 +v -34.2355 -1.9255 17.7248 +v -33.8290 0.3405 18.1280 +v -31.0551 -1.9255 14.3255 +v -30.9125 0.3405 14.8234 +v -26.4015 -1.9255 11.4559 +v -37.3171 -2.6809 20.5868 +v -35.1298 -2.6809 16.8376 +v -31.3689 -2.6809 13.2301 +v -25.9399 -2.6809 10.0711 +v -38.5757 -1.9255 20.0053 +v -36.0241 -1.9255 15.9505 +v -31.6826 -1.9255 12.1347 +v -25.4783 -1.9255 8.6863 +v -39.1478 0.3405 19.7409 +v -36.4307 0.3405 15.5473 +v -31.8252 0.3405 11.6368 +v -25.2685 0.3405 8.0569 +v -38.5757 2.6065 20.0053 +v -36.0241 2.6065 15.9505 +v -31.6826 2.6065 12.1347 +v -25.4783 2.6065 8.6863 +v -37.3171 3.3618 20.5868 +v -35.1298 3.3618 16.8376 +v -31.3689 3.3618 13.2301 +v -25.9399 3.3618 10.0711 +v -36.0586 2.6065 21.1683 +v -34.2355 2.6065 17.7248 +v -31.0551 2.6065 14.3255 +v -26.4015 2.6065 11.4559 +v 30.0058 -4.1609 19.3308 +v 29.5141 0.3405 20.6143 +v 23.0728 0.3405 19.1351 +v 23.0728 -4.6447 17.4041 +v 32.9341 -3.0963 23.4232 +v 32.3046 0.3405 24.1707 +v 34.6034 -2.0318 28.2119 +v 33.8363 0.3405 28.4823 +v 37.7598 -1.5479 32.2275 +v 36.5009 0.3405 32.2275 +v 31.0877 -5.6613 16.5072 +v 23.0728 -6.3065 13.5960 +v 34.3189 -4.2419 21.7788 +v 36.2911 -2.8225 27.6169 +v 40.5294 -2.1773 32.2275 +v 32.1696 -4.1609 13.6835 +v 23.0728 -4.6447 9.7879 +v 35.7036 -3.0963 20.1343 +v 37.9788 -2.0318 27.0218 +v 43.2989 -1.5479 32.2275 +v 32.6613 0.3405 12.4001 +v 23.0728 0.3405 8.0569 +v 36.3331 0.3405 19.3869 +v 38.7459 0.3405 26.7514 +v 44.5578 0.3405 32.2275 +v 32.1696 4.8418 13.6835 +v 23.0728 5.3257 9.7879 +v 35.7036 3.7772 20.1343 +v 37.9788 2.7127 27.0218 +v 43.2989 2.2288 32.2275 +v 31.0877 6.3422 16.5072 +v 23.0728 6.9874 13.5960 +v 34.3189 4.9228 21.7788 +v 36.2911 3.5034 27.6169 +v 40.5294 2.8582 32.2275 +v 30.0058 4.8418 19.3308 +v 23.0728 5.3257 17.4041 +v 32.9341 3.7772 23.4232 +v 34.6034 2.7127 28.2119 +v 37.7598 2.2288 32.2275 +v 38.8143 -1.4299 32.8217 +v 37.4661 0.3405 32.7940 +v 39.4449 -1.1702 33.0271 +v 38.1794 0.3405 32.9829 +v 39.4637 -0.9106 32.8328 +v 38.3893 0.3405 32.7940 +v 38.6830 -0.7925 32.2275 +v 37.8437 0.3405 32.2275 +v 41.7804 -2.0200 32.8826 +v 42.2289 -1.6738 33.1245 +v 41.8276 -1.3276 32.9180 +v 40.5294 -1.1702 32.2275 +v 44.7465 -1.4299 32.9434 +v 45.0129 -1.1702 33.2219 +v 44.1915 -0.9106 33.0032 +v 42.3757 -0.7925 32.2275 +v 46.0947 0.3405 32.9711 +v 46.2783 0.3405 33.2661 +v 45.2659 0.3405 33.0419 +v 43.2150 0.3405 32.2275 +v 44.7465 2.1108 32.9434 +v 45.0129 1.8511 33.2219 +v 44.1915 1.5915 33.0032 +v 42.3757 1.4735 32.2275 +v 41.7804 2.7009 32.8826 +v 42.2289 2.3547 33.1245 +v 41.8276 2.0085 32.9180 +v 40.5294 1.8511 32.2275 +v 38.8143 2.1108 32.8217 +v 39.4449 1.8511 33.0271 +v 39.4637 1.5915 32.8328 +v 38.6830 1.4735 32.2275 +v 4.4660 -1.4596 41.6377 +v 4.8189 0.3405 41.6377 +v 0.2449 0.3405 42.2986 +v 4.2723 -1.3767 40.0326 +v 4.6091 0.3405 40.0326 +v 2.6843 -0.6988 38.0499 +v 2.8886 0.3405 38.0499 +v 2.7224 -0.7137 36.2560 +v 2.9306 0.3405 36.2560 +v 3.4967 -2.9113 41.6377 +v 3.3473 -2.7619 40.0326 +v 2.1234 -1.5380 38.0499 +v 2.1517 -1.5663 36.2560 +v 2.0450 -3.8806 41.6377 +v 1.9621 -3.6869 40.0326 +v 1.2842 -2.0989 38.0499 +v 1.2991 -2.1370 36.2560 +v 0.2449 -4.2335 41.6377 +v 0.2449 -4.0237 40.0326 +v 0.2449 -2.3032 38.0499 +v 0.2449 -2.3452 36.2560 +v -1.5551 -3.8806 41.6377 +v -1.4722 -3.6869 40.0326 +v -0.7943 -2.0989 38.0499 +v -0.8092 -2.1370 36.2560 +v -3.0068 -2.9113 41.6377 +v -2.8574 -2.7619 40.0326 +v -1.6335 -1.5380 38.0499 +v -1.6618 -1.5663 36.2560 +v -3.9761 -1.4596 41.6377 +v -3.7824 -1.3767 40.0326 +v -2.1944 -0.6988 38.0499 +v -2.2325 -0.7137 36.2560 +v -4.3290 0.3405 41.6377 +v -4.1192 0.3405 40.0326 +v -2.3987 0.3405 38.0499 +v -2.4407 0.3405 36.2560 +v -3.9761 2.1405 41.6377 +v -3.7824 2.0576 40.0326 +v -2.1944 1.3797 38.0499 +v -2.2325 1.3946 36.2560 +v -3.0068 3.5922 41.6377 +v -2.8574 3.4428 40.0326 +v -1.6335 2.2189 38.0499 +v -1.6618 2.2473 36.2560 +v -1.5551 4.5615 41.6377 +v -1.4722 4.3678 40.0326 +v -0.7943 2.7798 38.0499 +v -0.8092 2.8179 36.2560 +v 0.2449 4.9144 41.6377 +v 0.2449 4.7046 40.0326 +v 0.2449 2.9841 38.0499 +v 0.2449 3.0261 36.2560 +v 2.0450 4.5615 41.6377 +v 1.9621 4.3678 40.0326 +v 1.2842 2.7798 38.0499 +v 1.2991 2.8179 36.2560 +v 3.4967 3.5922 41.6377 +v 3.3473 3.4428 40.0326 +v 2.1234 2.2189 38.0499 +v 2.1517 2.2473 36.2560 +v 4.4660 2.1405 41.6377 +v 4.2723 2.0576 40.0326 +v 2.6843 1.3797 38.0499 +v 2.7224 1.3946 36.2560 +v 5.8967 -2.0642 35.0600 +v 6.3715 0.3405 35.0600 +v 10.4646 -4.0077 34.2418 +v 11.3232 0.3405 34.2418 +v 14.5679 -5.7536 33.4235 +v 15.7712 0.3405 33.4235 +v 16.3486 -6.5113 32.2275 +v 17.7015 0.3405 32.2275 +v 4.5948 -4.0094 35.0600 +v 8.1105 -7.5251 34.2418 +v 11.2686 -10.6832 33.4235 +v 12.6391 -12.0537 32.2275 +v 2.6496 -5.3113 35.0600 +v 4.5931 -9.8792 34.2418 +v 6.3390 -13.9825 33.4235 +v 7.0967 -15.7632 32.2275 +v 0.2449 -5.7861 35.0600 +v 0.2449 -10.7378 34.2418 +v 0.2449 -15.1858 33.4235 +v 0.2449 -17.1161 32.2275 +v -2.1597 -5.3113 35.0600 +v -4.1033 -9.8792 34.2418 +v -5.8491 -13.9825 33.4235 +v -6.6068 -15.7632 32.2275 +v -4.1049 -4.0094 35.0600 +v -7.6206 -7.5251 34.2418 +v -10.7787 -10.6832 33.4235 +v -12.1492 -12.0537 32.2275 +v -5.4068 -2.0642 35.0600 +v -9.9747 -4.0077 34.2418 +v -14.0781 -5.7536 33.4235 +v -15.8587 -6.5113 32.2275 +v -5.8816 0.3405 35.0600 +v -10.8333 0.3405 34.2418 +v -15.2813 0.3405 33.4235 +v -17.2116 0.3405 32.2275 +v -5.4068 2.7451 35.0600 +v -9.9747 4.6887 34.2418 +v -14.0781 6.4345 33.4235 +v -15.8587 7.1922 32.2275 +v -4.1049 4.6903 35.0600 +v -7.6206 8.2060 34.2418 +v -10.7787 11.3641 33.4235 +v -12.1492 12.7346 32.2275 +v -2.1597 5.9922 35.0600 +v -4.1033 10.5601 34.2418 +v -5.8491 14.6635 33.4235 +v -6.6068 16.4442 32.2275 +v 0.2449 6.4670 35.0600 +v 0.2449 11.4187 34.2418 +v 0.2449 15.8667 33.4235 +v 0.2449 17.7970 32.2275 +v 2.6496 5.9922 35.0600 +v 4.5931 10.5601 34.2418 +v 6.3390 14.6635 33.4235 +v 7.0967 16.4442 32.2275 +v 4.5948 4.6903 35.0600 +v 8.1105 8.2060 34.2418 +v 11.2686 11.3641 33.4235 +v 12.6391 12.7346 32.2275 +v 5.8967 2.7451 35.0600 +v 10.4646 4.6887 34.2418 +v 14.5679 6.4345 33.4235 +v 16.3486 7.1922 32.2275 +# 529 vertices + +vn -0.8934 0.3691 0.2560 +vn -0.9668 0.0000 0.2554 +vn -0.9667 0.0000 -0.2558 +vn -0.8930 0.3699 -0.2563 +vn -0.0839 0.0355 0.9958 +vn -0.0921 0.0000 0.9958 +vn 0.6297 -0.2604 0.7319 +vn 0.6820 -0.0000 0.7313 +vn 0.8037 -0.3326 0.4934 +vn 0.8703 -0.0000 0.4925 +vn -0.6835 0.6835 0.2561 +vn -0.6834 0.6834 -0.2567 +vn -0.0649 0.0649 0.9958 +vn 0.4814 -0.4814 0.7325 +vn 0.6148 -0.6148 0.4940 +vn -0.3691 0.8934 0.2560 +vn -0.3699 0.8930 -0.2563 +vn -0.0355 0.0839 0.9958 +vn 0.2604 -0.6297 0.7319 +vn 0.3326 -0.8037 0.4934 +vn -0.0019 0.9670 0.2547 +vn -0.0028 0.9662 -0.2579 +vn -0.0003 0.0923 0.9957 +vn 0.0000 -0.6821 0.7313 +vn -0.0000 -0.8703 0.4925 +vn 0.3771 0.9141 0.1491 +vn 0.3791 0.8528 -0.3593 +vn 0.0275 0.1226 0.9921 +vn -0.2610 -0.6354 0.7268 +vn -0.3325 -0.8043 0.4925 +vn 0.7127 0.6976 0.0737 +vn 0.6635 0.6253 -0.4108 +vn 0.0997 0.1220 0.9875 +vn -0.4873 -0.4886 0.7238 +vn -0.6152 -0.6155 0.4926 +vn 0.9173 0.3615 0.1671 +vn 0.8800 0.3387 -0.3329 +vn 0.1136 0.0481 0.9924 +vn -0.6341 -0.2619 0.7275 +vn -0.8041 -0.3327 0.4926 +vn 0.9674 -0.0081 0.2530 +vn 0.9667 -0.0105 -0.2557 +vn 0.0934 -0.0013 0.9956 +vn -0.6822 0.0003 0.7312 +vn -0.8703 0.0001 0.4925 +vn 0.8934 -0.3691 0.2560 +vn 0.8930 -0.3699 -0.2563 +vn 0.0839 -0.0355 0.9958 +vn -0.6297 0.2604 0.7319 +vn -0.8037 0.3326 0.4934 +vn 0.6835 -0.6835 0.2561 +vn 0.6834 -0.6834 -0.2567 +vn 0.0649 -0.0649 0.9958 +vn -0.4814 0.4814 0.7325 +vn -0.6148 0.6148 0.4940 +vn 0.3691 -0.8934 0.2560 +vn 0.3699 -0.8930 -0.2563 +vn 0.0355 -0.0839 0.9958 +vn -0.2604 0.6297 0.7319 +vn -0.3326 0.8037 0.4934 +vn -0.0000 -0.9668 0.2554 +vn -0.0000 -0.9667 -0.2558 +vn -0.0000 -0.0921 0.9958 +vn 0.0000 0.6820 0.7313 +vn 0.0000 0.8703 0.4925 +vn -0.3691 -0.8934 0.2560 +vn -0.3699 -0.8930 -0.2563 +vn -0.0355 -0.0839 0.9958 +vn 0.2604 0.6297 0.7319 +vn 0.3326 0.8037 0.4934 +vn -0.6835 -0.6835 0.2561 +vn -0.6834 -0.6834 -0.2567 +vn -0.0649 -0.0649 0.9958 +vn 0.4814 0.4814 0.7325 +vn 0.6148 0.6148 0.4940 +vn -0.8934 -0.3691 0.2560 +vn -0.8930 -0.3699 -0.2563 +vn -0.0839 -0.0355 0.9958 +vn 0.6297 0.2604 0.7319 +vn 0.8037 0.3326 0.4934 +vn 0.8454 -0.3498 0.4035 +vn 0.9153 -0.0000 0.4027 +vn 0.8700 -0.3600 0.3369 +vn 0.9418 -0.0000 0.3362 +vn 0.9042 -0.3743 0.2058 +vn 0.9787 -0.0000 0.2053 +vn 0.9219 -0.3818 -0.0664 +vn 0.9978 0.0000 -0.0662 +vn 0.6468 -0.6468 0.4041 +vn 0.6657 -0.6657 0.3374 +vn 0.6919 -0.6919 0.2061 +vn 0.7055 -0.7055 -0.0665 +vn 0.3498 -0.8454 0.4035 +vn 0.3600 -0.8700 0.3369 +vn 0.3743 -0.9042 0.2058 +vn 0.3818 -0.9219 -0.0664 +vn -0.0000 -0.9153 0.4027 +vn -0.0000 -0.9418 0.3362 +vn 0.0000 -0.9787 0.2053 +vn -0.0000 -0.9978 -0.0662 +vn -0.3498 -0.8454 0.4035 +vn -0.3600 -0.8700 0.3369 +vn -0.3743 -0.9042 0.2058 +vn -0.3818 -0.9219 -0.0664 +vn -0.6468 -0.6468 0.4041 +vn -0.6657 -0.6657 0.3374 +vn -0.6919 -0.6919 0.2061 +vn -0.7055 -0.7055 -0.0665 +vn -0.8454 -0.3498 0.4035 +vn -0.8700 -0.3600 0.3369 +vn -0.9042 -0.3743 0.2058 +vn -0.9219 -0.3818 -0.0664 +vn -0.9153 0.0000 0.4027 +vn -0.9418 0.0000 0.3362 +vn -0.9787 -0.0000 0.2053 +vn -0.9978 -0.0000 -0.0662 +vn -0.8454 0.3498 0.4035 +vn -0.8700 0.3600 0.3369 +vn -0.9042 0.3743 0.2058 +vn -0.9219 0.3818 -0.0664 +vn -0.6468 0.6468 0.4041 +vn -0.6657 0.6657 0.3374 +vn -0.6919 0.6919 0.2061 +vn -0.7055 0.7055 -0.0665 +vn -0.3498 0.8454 0.4035 +vn -0.3600 0.8700 0.3369 +vn -0.3743 0.9042 0.2058 +vn -0.3818 0.9219 -0.0664 +vn 0.0000 0.9153 0.4027 +vn 0.0000 0.9418 0.3362 +vn -0.0000 0.9787 0.2053 +vn 0.0000 0.9978 -0.0662 +vn 0.3498 0.8454 0.4035 +vn 0.3600 0.8700 0.3369 +vn 0.3743 0.9042 0.2058 +vn 0.3818 0.9219 -0.0664 +vn 0.6468 0.6468 0.4041 +vn 0.6657 0.6657 0.3374 +vn 0.6919 0.6919 0.2061 +vn 0.7055 0.7055 -0.0665 +vn 0.8454 0.3498 0.4035 +vn 0.8700 0.3600 0.3369 +vn 0.9042 0.3743 0.2058 +vn 0.9219 0.3818 -0.0664 +vn 0.8314 -0.3442 -0.4362 +vn 0.9002 0.0000 -0.4355 +vn 0.6735 -0.2786 -0.6847 +vn 0.7296 0.0000 -0.6839 +vn 0.6404 -0.2649 -0.7209 +vn 0.6940 -0.0000 -0.7200 +vn 0.7329 -0.3032 -0.6090 +vn 0.7939 -0.0000 -0.6080 +vn 0.6361 -0.6361 -0.4368 +vn 0.5150 -0.5150 -0.6853 +vn 0.4897 -0.4897 -0.7214 +vn 0.5606 -0.5606 -0.6096 +vn 0.3442 -0.8314 -0.4362 +vn 0.2786 -0.6735 -0.6847 +vn 0.2649 -0.6404 -0.7209 +vn 0.3032 -0.7329 -0.6090 +vn 0.0000 -0.9002 -0.4355 +vn 0.0000 -0.7296 -0.6839 +vn -0.0000 -0.6940 -0.7200 +vn -0.0000 -0.7939 -0.6080 +vn -0.3442 -0.8314 -0.4362 +vn -0.2786 -0.6735 -0.6847 +vn -0.2649 -0.6404 -0.7209 +vn -0.3032 -0.7329 -0.6090 +vn -0.6361 -0.6361 -0.4368 +vn -0.5150 -0.5150 -0.6853 +vn -0.4897 -0.4897 -0.7214 +vn -0.5606 -0.5606 -0.6096 +vn -0.8314 -0.3442 -0.4362 +vn -0.6735 -0.2786 -0.6847 +vn -0.6404 -0.2649 -0.7209 +vn -0.7329 -0.3032 -0.6090 +vn -0.9002 -0.0000 -0.4355 +vn -0.7296 -0.0000 -0.6839 +vn -0.6940 0.0000 -0.7200 +vn -0.7939 0.0000 -0.6080 +vn -0.8314 0.3442 -0.4362 +vn -0.6735 0.2786 -0.6847 +vn -0.6404 0.2649 -0.7209 +vn -0.7329 0.3032 -0.6090 +vn -0.6361 0.6361 -0.4368 +vn -0.5150 0.5150 -0.6853 +vn -0.4897 0.4897 -0.7214 +vn -0.5606 0.5606 -0.6096 +vn -0.3442 0.8314 -0.4362 +vn -0.2786 0.6735 -0.6847 +vn -0.2649 0.6404 -0.7209 +vn -0.3032 0.7329 -0.6090 +vn -0.0000 0.9002 -0.4355 +vn -0.0000 0.7296 -0.6839 +vn 0.0000 0.6940 -0.7200 +vn 0.0000 0.7939 -0.6080 +vn 0.3442 0.8314 -0.4362 +vn 0.2786 0.6735 -0.6847 +vn 0.2649 0.6404 -0.7209 +vn 0.3032 0.7329 -0.6090 +vn 0.6361 0.6361 -0.4368 +vn 0.5150 0.5150 -0.6853 +vn 0.4897 0.4897 -0.7214 +vn 0.5606 0.5606 -0.6096 +vn 0.8314 0.3442 -0.4362 +vn 0.6735 0.2786 -0.6847 +vn 0.6404 0.2649 -0.7209 +vn 0.7329 0.3032 -0.6090 +vn 0.5762 -0.2382 -0.7818 +vn 0.6239 0.0000 -0.7815 +vn 0.1636 -0.0675 -0.9842 +vn 0.1773 0.0000 -0.9842 +vn 0.0454 -0.0187 -0.9988 +vn 0.0492 0.0000 -0.9988 +vn 0.0000 0.0000 -1.0000 +vn 0.4404 -0.4404 -0.7823 +vn 0.1249 -0.1249 -0.9843 +vn 0.0347 -0.0347 -0.9988 +vn 0.2382 -0.5762 -0.7818 +vn 0.0675 -0.1636 -0.9842 +vn 0.0187 -0.0454 -0.9988 +vn 0.0000 -0.6239 -0.7815 +vn 0.0000 -0.1773 -0.9842 +vn 0.0000 -0.0492 -0.9988 +vn -0.2382 -0.5762 -0.7818 +vn -0.0675 -0.1636 -0.9842 +vn -0.0187 -0.0454 -0.9988 +vn -0.4404 -0.4404 -0.7823 +vn -0.1249 -0.1249 -0.9843 +vn -0.0347 -0.0347 -0.9988 +vn -0.5762 -0.2382 -0.7818 +vn -0.1636 -0.0675 -0.9842 +vn -0.0454 -0.0187 -0.9988 +vn -0.6239 -0.0000 -0.7815 +vn -0.1773 -0.0000 -0.9842 +vn -0.0492 -0.0000 -0.9988 +vn -0.5762 0.2382 -0.7818 +vn -0.1636 0.0675 -0.9842 +vn -0.0454 0.0187 -0.9988 +vn -0.4404 0.4404 -0.7823 +vn -0.1249 0.1249 -0.9843 +vn -0.0347 0.0347 -0.9988 +vn -0.2382 0.5762 -0.7818 +vn -0.0675 0.1636 -0.9842 +vn -0.0187 0.0454 -0.9988 +vn -0.0000 0.6239 -0.7815 +vn -0.0000 0.1773 -0.9842 +vn -0.0000 0.0492 -0.9988 +vn 0.2382 0.5762 -0.7818 +vn 0.0675 0.1636 -0.9842 +vn 0.0187 0.0454 -0.9988 +vn 0.4404 0.4404 -0.7823 +vn 0.1249 0.1249 -0.9843 +vn 0.0347 0.0347 -0.9988 +vn 0.5762 0.2382 -0.7818 +vn 0.1636 0.0675 -0.9842 +vn 0.0454 0.0187 -0.9988 +vn 0.0361 -0.5456 -0.8373 +vn 0.0391 0.0010 -0.9992 +vn 0.0078 0.0002 -1.0000 +vn 0.0070 -0.5829 -0.8125 +vn 0.1618 -0.5630 -0.8104 +vn 0.1795 0.0044 -0.9837 +vn 0.4824 -0.6427 -0.5951 +vn 0.6123 0.0105 -0.7906 +vn 0.7387 -0.6642 -0.1146 +vn 0.9862 0.0067 -0.1657 +vn 0.0028 -0.9998 0.0171 +vn -0.0019 -0.9868 0.1621 +vn 0.0105 -0.9972 0.0734 +vn -0.0660 -0.9893 0.1301 +vn -0.0944 -0.9954 0.0166 +vn -0.0486 -0.5395 0.8406 +vn -0.0092 -0.4903 0.8715 +vn -0.2233 -0.5527 0.8029 +vn -0.5964 -0.5751 0.5600 +vn -0.8033 -0.5916 0.0682 +vn -0.0588 -0.0007 0.9983 +vn -0.0106 -0.0001 0.9999 +vn -0.2807 -0.0033 0.9598 +vn -0.7497 -0.0043 0.6617 +vn -0.9974 -0.0021 0.0727 +vn -0.0465 0.5388 0.8412 +vn -0.0088 0.4903 0.8715 +vn -0.2179 0.5492 0.8068 +vn -0.5973 0.5741 0.5600 +vn -0.8040 0.5913 0.0629 +vn 0.0020 0.9999 0.0146 +vn -0.0018 0.9868 0.1617 +vn 0.0092 0.9982 0.0601 +vn -0.0593 0.9917 0.1139 +vn -0.0869 0.9961 0.0123 +vn 0.0338 0.5454 -0.8375 +vn 0.0064 0.5831 -0.8124 +vn 0.1571 0.5622 -0.8119 +vn 0.4844 0.6465 -0.5894 +vn 0.7389 0.6662 -0.1013 +vn 0.7256 -0.6374 0.2594 +vn 0.9465 0.0034 0.3227 +vn 0.6459 -0.6077 0.4620 +vn 0.8258 0.0075 0.5639 +vn 0.5316 -0.5586 0.6367 +vn 0.6500 0.0069 0.7599 +vn 0.4250 -0.5955 0.6817 +vn 0.5324 0.0052 0.8465 +vn -0.0496 -0.9986 -0.0198 +vn -0.0378 -0.9986 -0.0356 +vn -0.0379 -0.9986 -0.0365 +vn -0.1689 -0.9395 -0.2979 +vn -0.7423 -0.5995 -0.2992 +vn -0.6196 -0.5795 -0.5294 +vn -0.4837 -0.5438 -0.6858 +vn -0.4453 -0.4132 -0.7944 +vn -0.9265 -0.0020 -0.3763 +vn -0.7539 -0.0043 -0.6570 +vn -0.5662 -0.0035 -0.8242 +vn -0.4818 -0.0019 -0.8763 +vn -0.7447 0.5990 -0.2944 +vn -0.6219 0.5782 -0.5281 +vn -0.4812 0.5428 -0.6883 +vn -0.4381 0.4157 -0.7970 +vn -0.0443 0.9989 -0.0171 +vn -0.0262 0.9993 -0.0282 +vn -0.0253 0.9993 -0.0283 +vn -0.1575 0.9442 -0.2894 +vn 0.7282 0.6371 0.2524 +vn 0.6471 0.6083 0.4597 +vn 0.5230 0.5622 0.6407 +vn 0.4100 0.6047 0.6829 +vn -0.3167 -0.7021 0.6378 +vn -0.5489 0.0015 0.8359 +vn -0.2308 0.0065 0.9730 +vn -0.1529 -0.7102 0.6872 +vn -0.6011 -0.6453 0.4715 +vn -0.8757 -0.0099 0.4828 +vn -0.6359 -0.6298 0.4461 +vn -0.8776 -0.0191 0.4791 +vn -0.4357 -0.6700 0.6010 +vn -0.6962 -0.0245 0.7174 +vn 0.2233 -0.9747 0.0065 +vn 0.1111 -0.9902 -0.0851 +vn 0.1901 -0.9695 0.1550 +vn 0.0053 -0.9819 0.1895 +vn -0.0118 -0.9690 0.2467 +vn 0.5725 -0.5916 -0.5677 +vn 0.3439 -0.5994 -0.7228 +vn 0.7874 -0.5605 -0.2565 +vn 0.6471 -0.6981 -0.3064 +vn 0.4275 -0.7536 -0.4993 +vn 0.6715 0.0009 -0.7410 +vn 0.4109 -0.0013 -0.9117 +vn 0.9220 0.0073 -0.3871 +vn 0.8469 0.0139 -0.5316 +vn 0.5359 0.0105 -0.8442 +vn 0.5787 0.5918 -0.5611 +vn 0.3412 0.6009 -0.7228 +vn 0.7849 0.5665 -0.2510 +vn 0.6427 0.7040 -0.3023 +vn 0.4186 0.7581 -0.5000 +vn 0.2328 0.9724 0.0126 +vn 0.1158 0.9901 -0.0791 +vn 0.2067 0.9663 0.1536 +vn 0.0245 0.9866 0.1614 +vn 0.0034 0.9775 0.2111 +vn -0.3195 0.7051 0.6331 +vn -0.1349 0.7136 0.6875 +vn -0.6039 0.6499 0.4614 +vn -0.6318 0.6401 0.4372 +vn -0.4243 0.6667 0.6127 +vn -0.2599 -0.5525 0.7919 +vn -0.4258 -0.0108 0.9048 +vn 0.0095 0.0217 0.9997 +vn 0.0220 -0.0016 0.9998 +vn 0.4102 0.8491 0.3329 +vn 0.9996 -0.0116 0.0259 +vn 0.5415 0.6370 -0.5486 +vn 0.7096 -0.0097 -0.7046 +vn 0.0463 -0.8892 0.4552 +vn -0.0107 -0.1489 0.9888 +vn -0.0444 0.7291 0.6829 +vn 0.1228 0.9924 0.0092 +vn 0.4818 -0.8575 -0.1804 +vn 0.4553 -0.4999 0.7367 +vn -0.2205 0.3583 0.9072 +vn -0.2359 0.7158 0.6573 +vn 0.7281 0.0156 -0.6853 +vn 0.8887 0.0167 0.4581 +vn -0.2601 -0.0008 0.9656 +vn -0.3716 0.0044 0.9284 +vn 0.4802 0.8589 -0.1784 +vn 0.4881 0.4980 0.7168 +vn -0.2220 -0.3619 0.9054 +vn -0.2354 -0.7105 0.6632 +vn 0.0587 0.8972 0.4377 +vn 0.0013 0.1640 0.9865 +vn -0.0442 -0.7303 0.6817 +vn 0.1388 -0.9897 -0.0342 +vn -0.2589 0.5454 0.7972 +vn 0.0123 -0.0193 0.9997 +vn 0.3986 -0.8457 0.3549 +vn 0.5376 -0.6107 -0.5814 +vn 0.7626 -0.3148 0.5650 +vn 0.8245 -0.0000 0.5658 +vn -0.0000 -0.0000 1.0000 +vn 0.8480 -0.3500 -0.3980 +vn 0.9177 -0.0000 -0.3973 +vn 0.8641 -0.3564 -0.3553 +vn 0.9353 -0.0001 -0.3539 +vn 0.7210 -0.2979 0.6256 +vn 0.7807 -0.0001 0.6249 +vn 0.5834 -0.5833 0.5652 +vn 0.6485 -0.6484 -0.3987 +vn 0.6609 -0.6607 -0.3559 +vn 0.5519 -0.5518 0.6253 +vn 0.3148 -0.7626 0.5651 +vn 0.3500 -0.8480 -0.3980 +vn 0.3565 -0.8642 -0.3552 +vn 0.2980 -0.7211 0.6255 +vn -0.0000 -0.8245 0.5658 +vn -0.0000 -0.9177 -0.3973 +vn -0.0001 -0.9353 -0.3539 +vn -0.0001 -0.7807 0.6249 +vn -0.3148 -0.7626 0.5650 +vn -0.3500 -0.8480 -0.3980 +vn -0.3564 -0.8641 -0.3553 +vn -0.2979 -0.7210 0.6256 +vn -0.5833 -0.5834 0.5652 +vn -0.6484 -0.6485 -0.3987 +vn -0.6607 -0.6609 -0.3559 +vn -0.5518 -0.5519 0.6253 +vn -0.7626 -0.3148 0.5651 +vn -0.8480 -0.3500 -0.3980 +vn -0.8642 -0.3565 -0.3552 +vn -0.7211 -0.2980 0.6255 +vn -0.8245 0.0000 0.5658 +vn -0.9177 0.0000 -0.3973 +vn -0.9353 0.0001 -0.3539 +vn -0.7807 0.0001 0.6249 +vn -0.7626 0.3148 0.5650 +vn -0.8480 0.3500 -0.3980 +vn -0.8641 0.3564 -0.3553 +vn -0.7210 0.2979 0.6256 +vn -0.5834 0.5833 0.5652 +vn -0.6485 0.6484 -0.3987 +vn -0.6609 0.6607 -0.3559 +vn -0.5519 0.5518 0.6253 +vn -0.3148 0.7626 0.5651 +vn -0.3500 0.8480 -0.3980 +vn -0.3565 0.8642 -0.3552 +vn -0.2980 0.7211 0.6255 +vn 0.0000 0.8245 0.5658 +vn 0.0000 0.9177 -0.3973 +vn 0.0001 0.9353 -0.3539 +vn 0.0001 0.7807 0.6249 +vn 0.3148 0.7626 0.5650 +vn 0.3500 0.8480 -0.3980 +vn 0.3564 0.8641 -0.3553 +vn 0.2979 0.7210 0.6256 +vn 0.5833 0.5834 0.5652 +vn 0.6484 0.6485 -0.3987 +vn 0.6607 0.6609 -0.3559 +vn 0.5518 0.5519 0.6253 +vn 0.7626 0.3148 0.5651 +vn 0.8480 0.3500 -0.3980 +vn 0.8642 0.3565 -0.3552 +vn 0.7211 0.2980 0.6255 +vn 0.2180 -0.0902 0.9718 +vn 0.2366 -0.0000 0.9716 +vn 0.1596 -0.0660 0.9850 +vn 0.1731 -0.0000 0.9849 +vn 0.3505 -0.1447 0.9253 +vn 0.3797 -0.0000 0.9251 +vn 0.4856 -0.2015 0.8507 +vn 0.5267 -0.0000 0.8501 +vn 0.1666 -0.1666 0.9718 +vn 0.1219 -0.1219 0.9850 +vn 0.2677 -0.2677 0.9256 +vn 0.3713 -0.3713 0.8510 +vn 0.0902 -0.2180 0.9718 +vn 0.0660 -0.1596 0.9850 +vn 0.1447 -0.3505 0.9253 +vn 0.2015 -0.4856 0.8507 +vn -0.0000 -0.2366 0.9716 +vn -0.0000 -0.1731 0.9849 +vn -0.0000 -0.3797 0.9251 +vn -0.0000 -0.5267 0.8501 +vn -0.0902 -0.2180 0.9718 +vn -0.0660 -0.1596 0.9850 +vn -0.1447 -0.3505 0.9253 +vn -0.2015 -0.4856 0.8507 +vn -0.1666 -0.1666 0.9718 +vn -0.1219 -0.1219 0.9850 +vn -0.2677 -0.2677 0.9256 +vn -0.3713 -0.3713 0.8510 +vn -0.2180 -0.0902 0.9718 +vn -0.1596 -0.0660 0.9850 +vn -0.3505 -0.1447 0.9253 +vn -0.4856 -0.2015 0.8507 +vn -0.2366 0.0000 0.9716 +vn -0.1731 0.0000 0.9849 +vn -0.3797 0.0000 0.9251 +vn -0.5267 0.0000 0.8501 +vn -0.2180 0.0902 0.9718 +vn -0.1596 0.0660 0.9850 +vn -0.3505 0.1447 0.9253 +vn -0.4856 0.2015 0.8507 +vn -0.1666 0.1666 0.9718 +vn -0.1219 0.1219 0.9850 +vn -0.2677 0.2677 0.9256 +vn -0.3713 0.3713 0.8510 +vn -0.0902 0.2180 0.9718 +vn -0.0660 0.1596 0.9850 +vn -0.1447 0.3505 0.9253 +vn -0.2015 0.4856 0.8507 +vn 0.0000 0.2366 0.9716 +vn 0.0000 0.1731 0.9849 +vn 0.0000 0.3797 0.9251 +vn 0.0000 0.5267 0.8501 +vn 0.0902 0.2180 0.9718 +vn 0.0660 0.1596 0.9850 +vn 0.1447 0.3505 0.9253 +vn 0.2015 0.4856 0.8507 +vn 0.1666 0.1666 0.9718 +vn 0.1219 0.1219 0.9850 +vn 0.2677 0.2677 0.9256 +vn 0.3713 0.3713 0.8510 +vn 0.2180 0.0902 0.9718 +vn 0.1596 0.0660 0.9850 +vn 0.3505 0.1447 0.9253 +vn 0.4856 0.2015 0.8507 +# 530 vertex normals + +vt 1.7500 1.9750 0.0000 +vt 2.0000 1.9750 0.0000 +vt 2.0000 2.0000 0.0000 +vt 1.7500 2.0000 0.0000 +vt 1.7500 1.9500 0.0000 +vt 2.0000 1.9500 0.0000 +vt 1.7500 1.9250 0.0000 +vt 2.0000 1.9250 0.0000 +vt 1.7500 1.9000 0.0000 +vt 2.0000 1.9000 0.0000 +vt 1.5000 1.9750 0.0000 +vt 1.5000 2.0000 0.0000 +vt 1.5000 1.9500 0.0000 +vt 1.5000 1.9250 0.0000 +vt 1.5000 1.9000 0.0000 +vt 1.2500 1.9750 0.0000 +vt 1.2500 2.0000 0.0000 +vt 1.2500 1.9500 0.0000 +vt 1.2500 1.9250 0.0000 +vt 1.2500 1.9000 0.0000 +vt 1.0000 1.9750 0.0000 +vt 1.0000 2.0000 0.0000 +vt 1.0000 1.9500 0.0000 +vt 1.0000 1.9250 0.0000 +vt 1.0000 1.9000 0.0000 +vt 0.7500 1.9750 0.0000 +vt 0.7500 2.0000 0.0000 +vt 0.7500 1.9500 0.0000 +vt 0.7500 1.9250 0.0000 +vt 0.7500 1.9000 0.0000 +vt 0.5000 1.9750 0.0000 +vt 0.5000 2.0000 0.0000 +vt 0.5000 1.9500 0.0000 +vt 0.5000 1.9250 0.0000 +vt 0.5000 1.9000 0.0000 +vt 0.2500 1.9750 0.0000 +vt 0.2500 2.0000 0.0000 +vt 0.2500 1.9500 0.0000 +vt 0.2500 1.9250 0.0000 +vt 0.2500 1.9000 0.0000 +vt 0.0000 1.9750 0.0000 +vt 0.0000 2.0000 0.0000 +vt 0.0000 1.9500 0.0000 +vt 0.0000 1.9250 0.0000 +vt 0.0000 1.9000 0.0000 +vt 1.7500 1.6750 0.0000 +vt 2.0000 1.6750 0.0000 +vt 1.7500 1.4500 0.0000 +vt 2.0000 1.4500 0.0000 +vt 1.7500 1.2250 0.0000 +vt 2.0000 1.2250 0.0000 +vt 1.7500 1.0000 0.0000 +vt 2.0000 1.0000 0.0000 +vt 1.5000 1.6750 0.0000 +vt 1.5000 1.4500 0.0000 +vt 1.5000 1.2250 0.0000 +vt 1.5000 1.0000 0.0000 +vt 1.2500 1.6750 0.0000 +vt 1.2500 1.4500 0.0000 +vt 1.2500 1.2250 0.0000 +vt 1.2500 1.0000 0.0000 +vt 1.0000 1.6750 0.0000 +vt 1.0000 1.4500 0.0000 +vt 1.0000 1.2250 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.7500 1.6750 0.0000 +vt 0.7500 1.4500 0.0000 +vt 0.7500 1.2250 0.0000 +vt 0.7500 1.0000 0.0000 +vt 0.5000 1.6750 0.0000 +vt 0.5000 1.4500 0.0000 +vt 0.5000 1.2250 0.0000 +vt 0.5000 1.0000 0.0000 +vt 0.2500 1.6750 0.0000 +vt 0.2500 1.4500 0.0000 +vt 0.2500 1.2250 0.0000 +vt 0.2500 1.0000 0.0000 +vt 0.0000 1.6750 0.0000 +vt 0.0000 1.4500 0.0000 +vt 0.0000 1.2250 0.0000 +vt 0.0000 1.0000 0.0000 +vt 1.7500 0.8500 0.0000 +vt 2.0000 0.8500 0.0000 +vt 1.7500 0.7000 0.0000 +vt 2.0000 0.7000 0.0000 +vt 1.7500 0.5500 0.0000 +vt 2.0000 0.5500 0.0000 +vt 1.7500 0.4000 0.0000 +vt 2.0000 0.4000 0.0000 +vt 1.5000 0.8500 0.0000 +vt 1.5000 0.7000 0.0000 +vt 1.5000 0.5500 0.0000 +vt 1.5000 0.4000 0.0000 +vt 1.2500 0.8500 0.0000 +vt 1.2500 0.7000 0.0000 +vt 1.2500 0.5500 0.0000 +vt 1.2500 0.4000 0.0000 +vt 1.0000 0.8500 0.0000 +vt 1.0000 0.7000 0.0000 +vt 1.0000 0.5500 0.0000 +vt 1.0000 0.4000 0.0000 +vt 0.7500 0.8500 0.0000 +vt 0.7500 0.7000 0.0000 +vt 0.7500 0.5500 0.0000 +vt 0.7500 0.4000 0.0000 +vt 0.5000 0.8500 0.0000 +vt 0.5000 0.7000 0.0000 +vt 0.5000 0.5500 0.0000 +vt 0.5000 0.4000 0.0000 +vt 0.2500 0.8500 0.0000 +vt 0.2500 0.7000 0.0000 +vt 0.2500 0.5500 0.0000 +vt 0.2500 0.4000 0.0000 +vt 0.0000 0.8500 0.0000 +vt 0.0000 0.7000 0.0000 +vt 0.0000 0.5500 0.0000 +vt 0.0000 0.4000 0.0000 +vt 1.7500 0.3000 0.0000 +vt 2.0000 0.3000 0.0000 +vt 1.7500 0.2000 0.0000 +vt 2.0000 0.2000 0.0000 +vt 1.7500 0.1000 0.0000 +vt 2.0000 0.1000 0.0000 +vt 1.7500 0.0000 0.0000 +vt 1.5000 0.3000 0.0000 +vt 1.5000 0.2000 0.0000 +vt 1.5000 0.1000 0.0000 +vt 1.5000 0.0000 0.0000 +vt 1.2500 0.3000 0.0000 +vt 1.2500 0.2000 0.0000 +vt 1.2500 0.1000 0.0000 +vt 1.2500 0.0000 0.0000 +vt 1.0000 0.3000 0.0000 +vt 1.0000 0.2000 0.0000 +vt 1.0000 0.1000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 0.7500 0.3000 0.0000 +vt 0.7500 0.2000 0.0000 +vt 0.7500 0.1000 0.0000 +vt 0.7500 0.0000 0.0000 +vt 0.5000 0.3000 0.0000 +vt 0.5000 0.2000 0.0000 +vt 0.5000 0.1000 0.0000 +vt 0.5000 0.0000 0.0000 +vt 0.2500 0.3000 0.0000 +vt 0.2500 0.2000 0.0000 +vt 0.2500 0.1000 0.0000 +vt 0.2500 0.0000 0.0000 +vt 0.0000 0.3000 0.0000 +vt 0.0000 0.2000 0.0000 +vt 0.0000 0.1000 0.0000 +vt 0.0000 0.0000 0.0000 +vt 0.8750 0.8750 0.0000 +vt 1.0000 0.8750 0.0000 +vt 0.8750 1.0000 0.0000 +vt 0.8750 0.7500 0.0000 +vt 1.0000 0.7500 0.0000 +vt 0.8750 0.6250 0.0000 +vt 1.0000 0.6250 0.0000 +vt 0.8750 0.5000 0.0000 +vt 1.0000 0.5000 0.0000 +vt 0.7500 0.8750 0.0000 +vt 0.7500 0.7500 0.0000 +vt 0.7500 0.6250 0.0000 +vt 0.7500 0.5000 0.0000 +vt 0.6250 0.8750 0.0000 +vt 0.6250 1.0000 0.0000 +vt 0.6250 0.7500 0.0000 +vt 0.6250 0.6250 0.0000 +vt 0.6250 0.5000 0.0000 +vt 0.5000 0.8750 0.0000 +vt 0.5000 0.7500 0.0000 +vt 0.5000 0.6250 0.0000 +vt 0.5000 0.5000 0.0000 +vt 0.3750 0.8750 0.0000 +vt 0.3750 1.0000 0.0000 +vt 0.3750 0.7500 0.0000 +vt 0.3750 0.6250 0.0000 +vt 0.3750 0.5000 0.0000 +vt 0.2500 0.8750 0.0000 +vt 0.2500 0.7500 0.0000 +vt 0.2500 0.6250 0.0000 +vt 0.2500 0.5000 0.0000 +vt 0.1250 0.8750 0.0000 +vt 0.1250 1.0000 0.0000 +vt 0.1250 0.7500 0.0000 +vt 0.1250 0.6250 0.0000 +vt 0.1250 0.5000 0.0000 +vt 0.0000 0.8750 0.0000 +vt 0.0000 0.7500 0.0000 +vt 0.0000 0.6250 0.0000 +vt 0.0000 0.5000 0.0000 +vt 0.8750 0.3750 0.0000 +vt 1.0000 0.3750 0.0000 +vt 0.8750 0.2500 0.0000 +vt 1.0000 0.2500 0.0000 +vt 0.8750 0.1250 0.0000 +vt 1.0000 0.1250 0.0000 +vt 0.8750 0.0000 0.0000 +vt 0.7500 0.3750 0.0000 +vt 0.7500 0.2500 0.0000 +vt 0.7500 0.1250 0.0000 +vt 0.6250 0.3750 0.0000 +vt 0.6250 0.2500 0.0000 +vt 0.6250 0.1250 0.0000 +vt 0.6250 0.0000 0.0000 +vt 0.5000 0.3750 0.0000 +vt 0.5000 0.2500 0.0000 +vt 0.5000 0.1250 0.0000 +vt 0.3750 0.3750 0.0000 +vt 0.3750 0.2500 0.0000 +vt 0.3750 0.1250 0.0000 +vt 0.3750 0.0000 0.0000 +vt 0.2500 0.3750 0.0000 +vt 0.2500 0.2500 0.0000 +vt 0.2500 0.1250 0.0000 +vt 0.1250 0.3750 0.0000 +vt 0.1250 0.2500 0.0000 +vt 0.1250 0.1250 0.0000 +vt 0.1250 0.0000 0.0000 +vt 0.0000 0.3750 0.0000 +vt 0.0000 0.2500 0.0000 +vt 0.0000 0.1250 0.0000 +vt 0.6250 0.2250 0.0000 +vt 0.5000 0.2250 0.0000 +vt 0.6250 0.4500 0.0000 +vt 0.5000 0.4500 0.0000 +vt 0.6250 0.6750 0.0000 +vt 0.5000 0.6750 0.0000 +vt 0.6250 0.9000 0.0000 +vt 0.5000 0.9000 0.0000 +vt 0.7500 0.2250 0.0000 +vt 0.7500 0.4500 0.0000 +vt 0.7500 0.6750 0.0000 +vt 0.7500 0.9000 0.0000 +vt 0.8750 0.2250 0.0000 +vt 0.8750 0.4500 0.0000 +vt 0.8750 0.6750 0.0000 +vt 0.8750 0.9000 0.0000 +vt 1.0000 0.2250 0.0000 +vt 1.0000 0.4500 0.0000 +vt 1.0000 0.6750 0.0000 +vt 1.0000 0.9000 0.0000 +vt 0.1250 0.2250 0.0000 +vt 0.0000 0.2250 0.0000 +vt 0.1250 0.4500 0.0000 +vt 0.0000 0.4500 0.0000 +vt 0.1250 0.6750 0.0000 +vt 0.0000 0.6750 0.0000 +vt 0.1250 0.9000 0.0000 +vt 0.0000 0.9000 0.0000 +vt 0.2500 0.2250 0.0000 +vt 0.2500 0.4500 0.0000 +vt 0.2500 0.6750 0.0000 +vt 0.2500 0.9000 0.0000 +vt 0.3750 0.2250 0.0000 +vt 0.3750 0.4500 0.0000 +vt 0.3750 0.6750 0.0000 +vt 0.3750 0.9000 0.0000 +vt 0.6250 0.9250 0.0000 +vt 0.5000 0.9250 0.0000 +vt 0.6250 0.9500 0.0000 +vt 0.5000 0.9500 0.0000 +vt 0.6250 0.9750 0.0000 +vt 0.5000 0.9750 0.0000 +vt 0.7500 0.9250 0.0000 +vt 0.7500 0.9500 0.0000 +vt 0.7500 0.9750 0.0000 +vt 0.8750 0.9250 0.0000 +vt 0.8750 0.9500 0.0000 +vt 0.8750 0.9750 0.0000 +vt 1.0000 0.9250 0.0000 +vt 1.0000 0.9500 0.0000 +vt 1.0000 0.9750 0.0000 +vt 0.1250 0.9250 0.0000 +vt 0.0000 0.9250 0.0000 +vt 0.1250 0.9500 0.0000 +vt 0.0000 0.9500 0.0000 +vt 0.1250 0.9750 0.0000 +vt 0.0000 0.9750 0.0000 +vt 0.2500 0.9250 0.0000 +vt 0.2500 0.9500 0.0000 +vt 0.2500 0.9750 0.0000 +vt 0.3750 0.9250 0.0000 +vt 0.3750 0.9500 0.0000 +vt 0.3750 0.9750 0.0000 +# 286 texture coords + +g Teapot001 +s 1 +f 1/1/1 2/2/2 3/3/3 +f 3/3/3 4/4/4 1/1/1 +f 5/5/5 6/6/6 2/2/2 +f 2/2/2 1/1/1 5/5/5 +f 7/7/7 8/8/8 6/6/6 +f 6/6/6 5/5/5 7/7/7 +f 9/9/9 10/10/10 8/8/8 +f 8/8/8 7/7/7 9/9/9 +f 11/11/11 1/1/1 4/4/4 +f 4/4/4 12/12/12 11/11/11 +f 13/13/13 5/5/5 1/1/1 +f 1/1/1 11/11/11 13/13/13 +f 14/14/14 7/7/7 5/5/5 +f 5/5/5 13/13/13 14/14/14 +f 15/15/15 9/9/9 7/7/7 +f 7/7/7 14/14/14 15/15/15 +f 16/16/16 11/11/11 12/12/12 +f 12/12/12 17/17/17 16/16/16 +f 18/18/18 13/13/13 11/11/11 +f 11/11/11 16/16/16 18/18/18 +f 19/19/19 14/14/14 13/13/13 +f 13/13/13 18/18/18 19/19/19 +f 20/20/20 15/15/15 14/14/14 +f 14/14/14 19/19/19 20/20/20 +f 21/21/21 16/16/16 17/17/17 +f 17/17/17 22/22/22 21/21/21 +f 23/23/23 18/18/18 16/16/16 +f 16/16/16 21/21/21 23/23/23 +f 24/24/24 19/19/19 18/18/18 +f 18/18/18 23/23/23 24/24/24 +f 25/25/25 20/20/20 19/19/19 +f 19/19/19 24/24/24 25/25/25 +f 26/26/26 21/21/21 22/22/22 +f 22/22/22 27/27/27 26/26/26 +f 28/28/28 23/23/23 21/21/21 +f 21/21/21 26/26/26 28/28/28 +f 29/29/29 24/24/24 23/23/23 +f 23/23/23 28/28/28 29/29/29 +f 30/30/30 25/25/25 24/24/24 +f 24/24/24 29/29/29 30/30/30 +f 31/31/31 26/26/26 27/27/27 +f 27/27/27 32/32/32 31/31/31 +f 33/33/33 28/28/28 26/26/26 +f 26/26/26 31/31/31 33/33/33 +f 34/34/34 29/29/29 28/28/28 +f 28/28/28 33/33/33 34/34/34 +f 35/35/35 30/30/30 29/29/29 +f 29/29/29 34/34/34 35/35/35 +f 36/36/36 31/31/31 32/32/32 +f 32/32/32 37/37/37 36/36/36 +f 38/38/38 33/33/33 31/31/31 +f 31/31/31 36/36/36 38/38/38 +f 39/39/39 34/34/34 33/33/33 +f 33/33/33 38/38/38 39/39/39 +f 40/40/40 35/35/35 34/34/34 +f 34/34/34 39/39/39 40/40/40 +f 41/41/41 36/36/36 37/37/37 +f 37/37/37 42/42/42 41/41/41 +f 43/43/43 38/38/38 36/36/36 +f 36/36/36 41/41/41 43/43/43 +f 44/44/44 39/39/39 38/38/38 +f 38/38/38 43/43/43 44/44/44 +f 45/45/45 40/40/40 39/39/39 +f 39/39/39 44/44/44 45/45/45 +f 46/1/46 41/2/41 42/3/42 +f 42/3/42 47/4/47 46/1/46 +f 48/5/48 43/6/43 41/2/41 +f 41/2/41 46/1/46 48/5/48 +f 49/7/49 44/8/44 43/6/43 +f 43/6/43 48/5/48 49/7/49 +f 50/9/50 45/10/45 44/8/44 +f 44/8/44 49/7/49 50/9/50 +f 51/11/51 46/1/46 47/4/47 +f 47/4/47 52/12/52 51/11/51 +f 53/13/53 48/5/48 46/1/46 +f 46/1/46 51/11/51 53/13/53 +f 54/14/54 49/7/49 48/5/48 +f 48/5/48 53/13/53 54/14/54 +f 55/15/55 50/9/50 49/7/49 +f 49/7/49 54/14/54 55/15/55 +f 56/16/56 51/11/51 52/12/52 +f 52/12/52 57/17/57 56/16/56 +f 58/18/58 53/13/53 51/11/51 +f 51/11/51 56/16/56 58/18/58 +f 59/19/59 54/14/54 53/13/53 +f 53/13/53 58/18/58 59/19/59 +f 60/20/60 55/15/55 54/14/54 +f 54/14/54 59/19/59 60/20/60 +f 61/21/61 56/16/56 57/17/57 +f 57/17/57 62/22/62 61/21/61 +f 63/23/63 58/18/58 56/16/56 +f 56/16/56 61/21/61 63/23/63 +f 64/24/64 59/19/59 58/18/58 +f 58/18/58 63/23/63 64/24/64 +f 65/25/65 60/20/60 59/19/59 +f 59/19/59 64/24/64 65/25/65 +f 66/26/66 61/21/61 62/22/62 +f 62/22/62 67/27/67 66/26/66 +f 68/28/68 63/23/63 61/21/61 +f 61/21/61 66/26/66 68/28/68 +f 69/29/69 64/24/64 63/23/63 +f 63/23/63 68/28/68 69/29/69 +f 70/30/70 65/25/65 64/24/64 +f 64/24/64 69/29/69 70/30/70 +f 71/31/71 66/26/66 67/27/67 +f 67/27/67 72/32/72 71/31/71 +f 73/33/73 68/28/68 66/26/66 +f 66/26/66 71/31/71 73/33/73 +f 74/34/74 69/29/69 68/28/68 +f 68/28/68 73/33/73 74/34/74 +f 75/35/75 70/30/70 69/29/69 +f 69/29/69 74/34/74 75/35/75 +f 76/36/76 71/31/71 72/32/72 +f 72/32/72 77/37/77 76/36/76 +f 78/38/78 73/33/73 71/31/71 +f 71/31/71 76/36/76 78/38/78 +f 79/39/79 74/34/74 73/33/73 +f 73/33/73 78/38/78 79/39/79 +f 80/40/80 75/35/75 74/34/74 +f 74/34/74 79/39/79 80/40/80 +f 2/41/2 76/36/76 77/37/77 +f 77/37/77 3/42/3 2/41/2 +f 6/43/6 78/38/78 76/36/76 +f 76/36/76 2/41/2 6/43/6 +f 8/44/8 79/39/79 78/38/78 +f 78/38/78 6/43/6 8/44/8 +f 10/45/10 80/40/80 79/39/79 +f 79/39/79 8/44/8 10/45/10 +f 81/46/81 82/47/82 10/10/10 +f 10/10/10 9/9/9 81/46/81 +f 83/48/83 84/49/84 82/47/82 +f 82/47/82 81/46/81 83/48/83 +f 85/50/85 86/51/86 84/49/84 +f 84/49/84 83/48/83 85/50/85 +f 87/52/87 88/53/88 86/51/86 +f 86/51/86 85/50/85 87/52/87 +f 89/54/89 81/46/81 9/9/9 +f 9/9/9 15/15/15 89/54/89 +f 90/55/90 83/48/83 81/46/81 +f 81/46/81 89/54/89 90/55/90 +f 91/56/91 85/50/85 83/48/83 +f 83/48/83 90/55/90 91/56/91 +f 92/57/92 87/52/87 85/50/85 +f 85/50/85 91/56/91 92/57/92 +f 93/58/93 89/54/89 15/15/15 +f 15/15/15 20/20/20 93/58/93 +f 94/59/94 90/55/90 89/54/89 +f 89/54/89 93/58/93 94/59/94 +f 95/60/95 91/56/91 90/55/90 +f 90/55/90 94/59/94 95/60/95 +f 96/61/96 92/57/92 91/56/91 +f 91/56/91 95/60/95 96/61/96 +f 97/62/97 93/58/93 20/20/20 +f 20/20/20 25/25/25 97/62/97 +f 98/63/98 94/59/94 93/58/93 +f 93/58/93 97/62/97 98/63/98 +f 99/64/99 95/60/95 94/59/94 +f 94/59/94 98/63/98 99/64/99 +f 100/65/100 96/61/96 95/60/95 +f 95/60/95 99/64/99 100/65/100 +f 101/66/101 97/62/97 25/25/25 +f 25/25/25 30/30/30 101/66/101 +f 102/67/102 98/63/98 97/62/97 +f 97/62/97 101/66/101 102/67/102 +f 103/68/103 99/64/99 98/63/98 +f 98/63/98 102/67/102 103/68/103 +f 104/69/104 100/65/100 99/64/99 +f 99/64/99 103/68/103 104/69/104 +f 105/70/105 101/66/101 30/30/30 +f 30/30/30 35/35/35 105/70/105 +f 106/71/106 102/67/102 101/66/101 +f 101/66/101 105/70/105 106/71/106 +f 107/72/107 103/68/103 102/67/102 +f 102/67/102 106/71/106 107/72/107 +f 108/73/108 104/69/104 103/68/103 +f 103/68/103 107/72/107 108/73/108 +f 109/74/109 105/70/105 35/35/35 +f 35/35/35 40/40/40 109/74/109 +f 110/75/110 106/71/106 105/70/105 +f 105/70/105 109/74/109 110/75/110 +f 111/76/111 107/72/107 106/71/106 +f 106/71/106 110/75/110 111/76/111 +f 112/77/112 108/73/108 107/72/107 +f 107/72/107 111/76/111 112/77/112 +f 113/78/113 109/74/109 40/40/40 +f 40/40/40 45/45/45 113/78/113 +f 114/79/114 110/75/110 109/74/109 +f 109/74/109 113/78/113 114/79/114 +f 115/80/115 111/76/111 110/75/110 +f 110/75/110 114/79/114 115/80/115 +f 116/81/116 112/77/112 111/76/111 +f 111/76/111 115/80/115 116/81/116 +f 117/46/117 113/47/113 45/10/45 +f 45/10/45 50/9/50 117/46/117 +f 118/48/118 114/49/114 113/47/113 +f 113/47/113 117/46/117 118/48/118 +f 119/50/119 115/51/115 114/49/114 +f 114/49/114 118/48/118 119/50/119 +f 120/52/120 116/53/116 115/51/115 +f 115/51/115 119/50/119 120/52/120 +f 121/54/121 117/46/117 50/9/50 +f 50/9/50 55/15/55 121/54/121 +f 122/55/122 118/48/118 117/46/117 +f 117/46/117 121/54/121 122/55/122 +f 123/56/123 119/50/119 118/48/118 +f 118/48/118 122/55/122 123/56/123 +f 124/57/124 120/52/120 119/50/119 +f 119/50/119 123/56/123 124/57/124 +f 125/58/125 121/54/121 55/15/55 +f 55/15/55 60/20/60 125/58/125 +f 126/59/126 122/55/122 121/54/121 +f 121/54/121 125/58/125 126/59/126 +f 127/60/127 123/56/123 122/55/122 +f 122/55/122 126/59/126 127/60/127 +f 128/61/128 124/57/124 123/56/123 +f 123/56/123 127/60/127 128/61/128 +f 129/62/129 125/58/125 60/20/60 +f 60/20/60 65/25/65 129/62/129 +f 130/63/130 126/59/126 125/58/125 +f 125/58/125 129/62/129 130/63/130 +f 131/64/131 127/60/127 126/59/126 +f 126/59/126 130/63/130 131/64/131 +f 132/65/132 128/61/128 127/60/127 +f 127/60/127 131/64/131 132/65/132 +f 133/66/133 129/62/129 65/25/65 +f 65/25/65 70/30/70 133/66/133 +f 134/67/134 130/63/130 129/62/129 +f 129/62/129 133/66/133 134/67/134 +f 135/68/135 131/64/131 130/63/130 +f 130/63/130 134/67/134 135/68/135 +f 136/69/136 132/65/132 131/64/131 +f 131/64/131 135/68/135 136/69/136 +f 137/70/137 133/66/133 70/30/70 +f 70/30/70 75/35/75 137/70/137 +f 138/71/138 134/67/134 133/66/133 +f 133/66/133 137/70/137 138/71/138 +f 139/72/139 135/68/135 134/67/134 +f 134/67/134 138/71/138 139/72/139 +f 140/73/140 136/69/136 135/68/135 +f 135/68/135 139/72/139 140/73/140 +f 141/74/141 137/70/137 75/35/75 +f 75/35/75 80/40/80 141/74/141 +f 142/75/142 138/71/138 137/70/137 +f 137/70/137 141/74/141 142/75/142 +f 143/76/143 139/72/139 138/71/138 +f 138/71/138 142/75/142 143/76/143 +f 144/77/144 140/73/140 139/72/139 +f 139/72/139 143/76/143 144/77/144 +f 82/78/82 141/74/141 80/40/80 +f 80/40/80 10/45/10 82/78/82 +f 84/79/84 142/75/142 141/74/141 +f 141/74/141 82/78/82 84/79/84 +f 86/80/86 143/76/143 142/75/142 +f 142/75/142 84/79/84 86/80/86 +f 88/81/88 144/77/144 143/76/143 +f 143/76/143 86/80/86 88/81/88 +f 145/82/145 146/83/146 88/53/88 +f 88/53/88 87/52/87 145/82/145 +f 147/84/147 148/85/148 146/83/146 +f 146/83/146 145/82/145 147/84/147 +f 149/86/149 150/87/150 148/85/148 +f 148/85/148 147/84/147 149/86/149 +f 151/88/151 152/89/152 150/87/150 +f 150/87/150 149/86/149 151/88/151 +f 153/90/153 145/82/145 87/52/87 +f 87/52/87 92/57/92 153/90/153 +f 154/91/154 147/84/147 145/82/145 +f 145/82/145 153/90/153 154/91/154 +f 155/92/155 149/86/149 147/84/147 +f 147/84/147 154/91/154 155/92/155 +f 156/93/156 151/88/151 149/86/149 +f 149/86/149 155/92/155 156/93/156 +f 157/94/157 153/90/153 92/57/92 +f 92/57/92 96/61/96 157/94/157 +f 158/95/158 154/91/154 153/90/153 +f 153/90/153 157/94/157 158/95/158 +f 159/96/159 155/92/155 154/91/154 +f 154/91/154 158/95/158 159/96/159 +f 160/97/160 156/93/156 155/92/155 +f 155/92/155 159/96/159 160/97/160 +f 161/98/161 157/94/157 96/61/96 +f 96/61/96 100/65/100 161/98/161 +f 162/99/162 158/95/158 157/94/157 +f 157/94/157 161/98/161 162/99/162 +f 163/100/163 159/96/159 158/95/158 +f 158/95/158 162/99/162 163/100/163 +f 164/101/164 160/97/160 159/96/159 +f 159/96/159 163/100/163 164/101/164 +f 165/102/165 161/98/161 100/65/100 +f 100/65/100 104/69/104 165/102/165 +f 166/103/166 162/99/162 161/98/161 +f 161/98/161 165/102/165 166/103/166 +f 167/104/167 163/100/163 162/99/162 +f 162/99/162 166/103/166 167/104/167 +f 168/105/168 164/101/164 163/100/163 +f 163/100/163 167/104/167 168/105/168 +f 169/106/169 165/102/165 104/69/104 +f 104/69/104 108/73/108 169/106/169 +f 170/107/170 166/103/166 165/102/165 +f 165/102/165 169/106/169 170/107/170 +f 171/108/171 167/104/167 166/103/166 +f 166/103/166 170/107/170 171/108/171 +f 172/109/172 168/105/168 167/104/167 +f 167/104/167 171/108/171 172/109/172 +f 173/110/173 169/106/169 108/73/108 +f 108/73/108 112/77/112 173/110/173 +f 174/111/174 170/107/170 169/106/169 +f 169/106/169 173/110/173 174/111/174 +f 175/112/175 171/108/171 170/107/170 +f 170/107/170 174/111/174 175/112/175 +f 176/113/176 172/109/172 171/108/171 +f 171/108/171 175/112/175 176/113/176 +f 177/114/177 173/110/173 112/77/112 +f 112/77/112 116/81/116 177/114/177 +f 178/115/178 174/111/174 173/110/173 +f 173/110/173 177/114/177 178/115/178 +f 179/116/179 175/112/175 174/111/174 +f 174/111/174 178/115/178 179/116/179 +f 180/117/180 176/113/176 175/112/175 +f 175/112/175 179/116/179 180/117/180 +f 181/82/181 177/83/177 116/53/116 +f 116/53/116 120/52/120 181/82/181 +f 182/84/182 178/85/178 177/83/177 +f 177/83/177 181/82/181 182/84/182 +f 183/86/183 179/87/179 178/85/178 +f 178/85/178 182/84/182 183/86/183 +f 184/88/184 180/89/180 179/87/179 +f 179/87/179 183/86/183 184/88/184 +f 185/90/185 181/82/181 120/52/120 +f 120/52/120 124/57/124 185/90/185 +f 186/91/186 182/84/182 181/82/181 +f 181/82/181 185/90/185 186/91/186 +f 187/92/187 183/86/183 182/84/182 +f 182/84/182 186/91/186 187/92/187 +f 188/93/188 184/88/184 183/86/183 +f 183/86/183 187/92/187 188/93/188 +f 189/94/189 185/90/185 124/57/124 +f 124/57/124 128/61/128 189/94/189 +f 190/95/190 186/91/186 185/90/185 +f 185/90/185 189/94/189 190/95/190 +f 191/96/191 187/92/187 186/91/186 +f 186/91/186 190/95/190 191/96/191 +f 192/97/192 188/93/188 187/92/187 +f 187/92/187 191/96/191 192/97/192 +f 193/98/193 189/94/189 128/61/128 +f 128/61/128 132/65/132 193/98/193 +f 194/99/194 190/95/190 189/94/189 +f 189/94/189 193/98/193 194/99/194 +f 195/100/195 191/96/191 190/95/190 +f 190/95/190 194/99/194 195/100/195 +f 196/101/196 192/97/192 191/96/191 +f 191/96/191 195/100/195 196/101/196 +f 197/102/197 193/98/193 132/65/132 +f 132/65/132 136/69/136 197/102/197 +f 198/103/198 194/99/194 193/98/193 +f 193/98/193 197/102/197 198/103/198 +f 199/104/199 195/100/195 194/99/194 +f 194/99/194 198/103/198 199/104/199 +f 200/105/200 196/101/196 195/100/195 +f 195/100/195 199/104/199 200/105/200 +f 201/106/201 197/102/197 136/69/136 +f 136/69/136 140/73/140 201/106/201 +f 202/107/202 198/103/198 197/102/197 +f 197/102/197 201/106/201 202/107/202 +f 203/108/203 199/104/199 198/103/198 +f 198/103/198 202/107/202 203/108/203 +f 204/109/204 200/105/200 199/104/199 +f 199/104/199 203/108/203 204/109/204 +f 205/110/205 201/106/201 140/73/140 +f 140/73/140 144/77/144 205/110/205 +f 206/111/206 202/107/202 201/106/201 +f 201/106/201 205/110/205 206/111/206 +f 207/112/207 203/108/203 202/107/202 +f 202/107/202 206/111/206 207/112/207 +f 208/113/208 204/109/204 203/108/203 +f 203/108/203 207/112/207 208/113/208 +f 146/114/146 205/110/205 144/77/144 +f 144/77/144 88/81/88 146/114/146 +f 148/115/148 206/111/206 205/110/205 +f 205/110/205 146/114/146 148/115/148 +f 150/116/150 207/112/207 206/111/206 +f 206/111/206 148/115/148 150/116/150 +f 152/117/152 208/113/208 207/112/207 +f 207/112/207 150/116/150 152/117/152 +f 209/118/209 210/119/210 152/89/152 +f 152/89/152 151/88/151 209/118/209 +f 211/120/211 212/121/212 210/119/210 +f 210/119/210 209/118/209 211/120/211 +f 213/122/213 214/123/214 212/121/212 +f 212/121/212 211/120/211 213/122/213 +f 214/123/214 213/122/213 215/124/215 +f 216/125/216 209/118/209 151/88/151 +f 151/88/151 156/93/156 216/125/216 +f 217/126/217 211/120/211 209/118/209 +f 209/118/209 216/125/216 217/126/217 +f 218/127/218 213/122/213 211/120/211 +f 211/120/211 217/126/217 218/127/218 +f 213/122/213 218/127/218 215/128/215 +f 219/129/219 216/125/216 156/93/156 +f 156/93/156 160/97/160 219/129/219 +f 220/130/220 217/126/217 216/125/216 +f 216/125/216 219/129/219 220/130/220 +f 221/131/221 218/127/218 217/126/217 +f 217/126/217 220/130/220 221/131/221 +f 218/127/218 221/131/221 215/132/215 +f 222/133/222 219/129/219 160/97/160 +f 160/97/160 164/101/164 222/133/222 +f 223/134/223 220/130/220 219/129/219 +f 219/129/219 222/133/222 223/134/223 +f 224/135/224 221/131/221 220/130/220 +f 220/130/220 223/134/223 224/135/224 +f 221/131/221 224/135/224 215/136/215 +f 225/137/225 222/133/222 164/101/164 +f 164/101/164 168/105/168 225/137/225 +f 226/138/226 223/134/223 222/133/222 +f 222/133/222 225/137/225 226/138/226 +f 227/139/227 224/135/224 223/134/223 +f 223/134/223 226/138/226 227/139/227 +f 224/135/224 227/139/227 215/140/215 +f 228/141/228 225/137/225 168/105/168 +f 168/105/168 172/109/172 228/141/228 +f 229/142/229 226/138/226 225/137/225 +f 225/137/225 228/141/228 229/142/229 +f 230/143/230 227/139/227 226/138/226 +f 226/138/226 229/142/229 230/143/230 +f 227/139/227 230/143/230 215/144/215 +f 231/145/231 228/141/228 172/109/172 +f 172/109/172 176/113/176 231/145/231 +f 232/146/232 229/142/229 228/141/228 +f 228/141/228 231/145/231 232/146/232 +f 233/147/233 230/143/230 229/142/229 +f 229/142/229 232/146/232 233/147/233 +f 230/143/230 233/147/233 215/148/215 +f 234/149/234 231/145/231 176/113/176 +f 176/113/176 180/117/180 234/149/234 +f 235/150/235 232/146/232 231/145/231 +f 231/145/231 234/149/234 235/150/235 +f 236/151/236 233/147/233 232/146/232 +f 232/146/232 235/150/235 236/151/236 +f 233/147/233 236/151/236 215/152/215 +f 237/118/237 234/119/234 180/89/180 +f 180/89/180 184/88/184 237/118/237 +f 238/120/238 235/121/235 234/119/234 +f 234/119/234 237/118/237 238/120/238 +f 239/122/239 236/123/236 235/121/235 +f 235/121/235 238/120/238 239/122/239 +f 236/123/236 239/122/239 215/124/215 +f 240/125/240 237/118/237 184/88/184 +f 184/88/184 188/93/188 240/125/240 +f 241/126/241 238/120/238 237/118/237 +f 237/118/237 240/125/240 241/126/241 +f 242/127/242 239/122/239 238/120/238 +f 238/120/238 241/126/241 242/127/242 +f 239/122/239 242/127/242 215/128/215 +f 243/129/243 240/125/240 188/93/188 +f 188/93/188 192/97/192 243/129/243 +f 244/130/244 241/126/241 240/125/240 +f 240/125/240 243/129/243 244/130/244 +f 245/131/245 242/127/242 241/126/241 +f 241/126/241 244/130/244 245/131/245 +f 242/127/242 245/131/245 215/132/215 +f 246/133/246 243/129/243 192/97/192 +f 192/97/192 196/101/196 246/133/246 +f 247/134/247 244/130/244 243/129/243 +f 243/129/243 246/133/246 247/134/247 +f 248/135/248 245/131/245 244/130/244 +f 244/130/244 247/134/247 248/135/248 +f 245/131/245 248/135/248 215/136/215 +f 249/137/249 246/133/246 196/101/196 +f 196/101/196 200/105/200 249/137/249 +f 250/138/250 247/134/247 246/133/246 +f 246/133/246 249/137/249 250/138/250 +f 251/139/251 248/135/248 247/134/247 +f 247/134/247 250/138/250 251/139/251 +f 248/135/248 251/139/251 215/140/215 +f 252/141/252 249/137/249 200/105/200 +f 200/105/200 204/109/204 252/141/252 +f 253/142/253 250/138/250 249/137/249 +f 249/137/249 252/141/252 253/142/253 +f 254/143/254 251/139/251 250/138/250 +f 250/138/250 253/142/253 254/143/254 +f 251/139/251 254/143/254 215/144/215 +f 255/145/255 252/141/252 204/109/204 +f 204/109/204 208/113/208 255/145/255 +f 256/146/256 253/142/253 252/141/252 +f 252/141/252 255/145/255 256/146/256 +f 257/147/257 254/143/254 253/142/253 +f 253/142/253 256/146/256 257/147/257 +f 254/143/254 257/147/257 215/148/215 +f 210/149/210 255/145/255 208/113/208 +f 208/113/208 152/117/152 210/149/210 +f 212/150/212 256/146/256 255/145/255 +f 255/145/255 210/149/210 212/150/212 +f 214/151/214 257/147/257 256/146/256 +f 256/146/256 212/150/212 214/151/214 +f 257/147/257 214/151/214 215/152/215 +f 258/153/258 259/154/259 260/65/260 +f 260/65/260 261/155/261 258/153/258 +f 262/156/262 263/157/263 259/154/259 +f 259/154/259 258/153/258 262/156/262 +f 264/158/264 265/159/265 263/157/263 +f 263/157/263 262/156/262 264/158/264 +f 266/160/266 267/161/267 265/159/265 +f 265/159/265 264/158/264 266/160/266 +f 268/162/268 258/153/258 261/155/261 +f 261/155/261 269/69/269 268/162/268 +f 270/163/270 262/156/262 258/153/258 +f 258/153/258 268/162/268 270/163/270 +f 271/164/271 264/158/264 262/156/262 +f 262/156/262 270/163/270 271/164/271 +f 272/165/272 266/160/266 264/158/264 +f 264/158/264 271/164/271 272/165/272 +f 273/166/273 268/162/268 269/69/269 +f 269/69/269 274/167/274 273/166/273 +f 275/168/275 270/163/270 268/162/268 +f 268/162/268 273/166/273 275/168/275 +f 276/169/276 271/164/271 270/163/270 +f 270/163/270 275/168/275 276/169/276 +f 277/170/277 272/165/272 271/164/271 +f 271/164/271 276/169/276 277/170/277 +f 278/171/278 273/166/273 274/167/274 +f 274/167/274 279/73/279 278/171/278 +f 280/172/280 275/168/275 273/166/273 +f 273/166/273 278/171/278 280/172/280 +f 281/173/281 276/169/276 275/168/275 +f 275/168/275 280/172/280 281/173/281 +f 282/174/282 277/170/277 276/169/276 +f 276/169/276 281/173/281 282/174/282 +f 283/175/283 278/171/278 279/73/279 +f 279/73/279 284/176/284 283/175/283 +f 285/177/285 280/172/280 278/171/278 +f 278/171/278 283/175/283 285/177/285 +f 286/178/286 281/173/281 280/172/280 +f 280/172/280 285/177/285 286/178/286 +f 287/179/287 282/174/282 281/173/281 +f 281/173/281 286/178/286 287/179/287 +f 288/180/288 283/175/283 284/176/284 +f 284/176/284 289/77/289 288/180/288 +f 290/181/290 285/177/285 283/175/283 +f 283/175/283 288/180/288 290/181/290 +f 291/182/291 286/178/286 285/177/285 +f 285/177/285 290/181/290 291/182/291 +f 292/183/292 287/179/287 286/178/286 +f 286/178/286 291/182/291 292/183/292 +f 293/184/293 288/180/288 289/77/289 +f 289/77/289 294/185/294 293/184/293 +f 295/186/295 290/181/290 288/180/288 +f 288/180/288 293/184/293 295/186/295 +f 296/187/296 291/182/291 290/181/290 +f 290/181/290 295/186/295 296/187/296 +f 297/188/297 292/183/292 291/182/291 +f 291/182/291 296/187/296 297/188/297 +f 259/189/259 293/184/293 294/185/294 +f 294/185/294 260/81/260 259/189/259 +f 263/190/263 295/186/295 293/184/293 +f 293/184/293 259/189/259 263/190/263 +f 265/191/265 296/187/296 295/186/295 +f 295/186/295 263/190/263 265/191/265 +f 267/192/267 297/188/297 296/187/296 +f 296/187/296 265/191/265 267/192/267 +f 298/193/298 299/194/299 267/161/267 +f 267/161/267 266/160/266 298/193/298 +f 300/195/300 301/196/301 299/194/299 +f 299/194/299 298/193/298 300/195/300 +f 302/197/302 303/198/303 301/196/301 +f 301/196/301 300/195/300 302/197/302 +f 304/199/304 116/136/305 303/198/303 +f 303/198/303 302/197/302 304/199/304 +f 305/200/306 298/193/298 266/160/266 +f 266/160/266 272/165/272 305/200/306 +f 306/201/307 300/195/300 298/193/298 +f 298/193/298 305/200/306 306/201/307 +f 307/202/308 302/197/302 300/195/300 +f 300/195/300 306/201/307 307/202/308 +f 308/140/309 304/199/304 302/197/302 +f 302/197/302 307/202/308 308/140/309 +f 309/203/310 305/200/306 272/165/272 +f 272/165/272 277/170/277 309/203/310 +f 310/204/311 306/201/307 305/200/306 +f 305/200/306 309/203/310 310/204/311 +f 311/205/312 307/202/308 306/201/307 +f 306/201/307 310/204/311 311/205/312 +f 312/206/313 308/140/309 307/202/308 +f 307/202/308 311/205/312 312/206/313 +f 313/207/314 309/203/310 277/170/277 +f 277/170/277 282/174/282 313/207/314 +f 314/208/315 310/204/311 309/203/310 +f 309/203/310 313/207/314 314/208/315 +f 315/209/316 311/205/312 310/204/311 +f 310/204/311 314/208/315 315/209/316 +f 316/144/317 312/206/313 311/205/312 +f 311/205/312 315/209/316 316/144/317 +f 317/210/318 313/207/314 282/174/282 +f 282/174/282 287/179/287 317/210/318 +f 318/211/319 314/208/315 313/207/314 +f 313/207/314 317/210/318 318/211/319 +f 319/212/320 315/209/316 314/208/315 +f 314/208/315 318/211/319 319/212/320 +f 320/213/321 316/144/317 315/209/316 +f 315/209/316 319/212/320 320/213/321 +f 321/214/322 317/210/318 287/179/287 +f 287/179/287 292/183/292 321/214/322 +f 322/215/323 318/211/319 317/210/318 +f 317/210/318 321/214/322 322/215/323 +f 323/216/324 319/212/320 318/211/319 +f 318/211/319 322/215/323 323/216/324 +f 324/148/325 320/213/321 319/212/320 +f 319/212/320 323/216/324 324/148/325 +f 325/217/326 321/214/322 292/183/292 +f 292/183/292 297/188/297 325/217/326 +f 326/218/327 322/215/323 321/214/322 +f 321/214/322 325/217/326 326/218/327 +f 327/219/328 323/216/324 322/215/323 +f 322/215/323 326/218/327 327/219/328 +f 328/220/329 324/148/325 323/216/324 +f 323/216/324 327/219/328 328/220/329 +f 299/221/299 325/217/326 297/188/297 +f 297/188/297 267/192/267 299/221/299 +f 301/222/301 326/218/327 325/217/326 +f 325/217/326 299/221/299 301/222/301 +f 303/223/303 327/219/328 326/218/327 +f 326/218/327 301/222/301 303/223/303 +f 116/152/305 328/220/329 327/219/328 +f 327/219/328 303/223/303 116/152/305 +f 329/224/330 330/225/331 331/144/332 +f 331/144/332 332/206/333 329/224/330 +f 333/226/334 334/227/335 330/225/331 +f 330/225/331 329/224/330 333/226/334 +f 335/228/336 336/229/337 334/227/335 +f 334/227/335 333/226/334 335/228/336 +f 337/230/338 338/231/339 336/229/337 +f 336/229/337 335/228/336 337/230/338 +f 339/232/340 329/224/330 332/206/333 +f 332/206/333 340/140/341 339/232/340 +f 341/233/342 333/226/334 329/224/330 +f 329/224/330 339/232/340 341/233/342 +f 342/234/343 335/228/336 333/226/334 +f 333/226/334 341/233/342 342/234/343 +f 343/235/344 337/230/338 335/228/336 +f 335/228/336 342/234/343 343/235/344 +f 344/236/345 339/232/340 340/140/341 +f 340/140/341 345/199/346 344/236/345 +f 346/237/347 341/233/342 339/232/340 +f 339/232/340 344/236/345 346/237/347 +f 347/238/348 342/234/343 341/233/342 +f 341/233/342 346/237/347 347/238/348 +f 348/239/349 343/235/344 342/234/343 +f 342/234/343 347/238/348 348/239/349 +f 349/240/350 344/236/345 345/199/346 +f 345/199/346 350/136/351 349/240/350 +f 351/241/352 346/237/347 344/236/345 +f 344/236/345 349/240/350 351/241/352 +f 352/242/353 347/238/348 346/237/347 +f 346/237/347 351/241/352 352/242/353 +f 353/243/354 348/239/349 347/238/348 +f 347/238/348 352/242/353 353/243/354 +f 354/244/355 349/245/350 350/152/351 +f 350/152/351 355/220/356 354/244/355 +f 356/246/357 351/247/352 349/245/350 +f 349/245/350 354/244/355 356/246/357 +f 357/248/358 352/249/353 351/247/352 +f 351/247/352 356/246/357 357/248/358 +f 358/250/359 353/251/354 352/249/353 +f 352/249/353 357/248/358 358/250/359 +f 359/252/360 354/244/355 355/220/356 +f 355/220/356 360/148/361 359/252/360 +f 361/253/362 356/246/357 354/244/355 +f 354/244/355 359/252/360 361/253/362 +f 362/254/363 357/248/358 356/246/357 +f 356/246/357 361/253/362 362/254/363 +f 363/255/364 358/250/359 357/248/358 +f 357/248/358 362/254/363 363/255/364 +f 364/256/365 359/252/360 360/148/361 +f 360/148/361 365/213/366 364/256/365 +f 366/257/367 361/253/362 359/252/360 +f 359/252/360 364/256/365 366/257/367 +f 367/258/368 362/254/363 361/253/362 +f 361/253/362 366/257/367 367/258/368 +f 368/259/369 363/255/364 362/254/363 +f 362/254/363 367/258/368 368/259/369 +f 330/225/331 364/256/365 365/213/366 +f 365/213/366 331/144/332 330/225/331 +f 334/227/335 366/257/367 364/256/365 +f 364/256/365 330/225/331 334/227/335 +f 336/229/337 367/258/368 366/257/367 +f 366/257/367 334/227/335 336/229/337 +f 338/231/339 368/259/369 367/258/368 +f 367/258/368 336/229/337 338/231/339 +f 369/260/370 370/261/371 338/231/339 +f 338/231/339 337/230/338 369/260/370 +f 371/262/372 372/263/373 370/261/371 +f 370/261/371 369/260/370 371/262/372 +f 373/264/374 374/265/375 372/263/373 +f 372/263/373 371/262/372 373/264/374 +f 375/167/376 376/73/377 374/265/375 +f 374/265/375 373/264/374 375/167/376 +f 377/266/378 369/260/370 337/230/338 +f 337/230/338 343/235/344 377/266/378 +f 378/267/379 371/262/372 369/260/370 +f 369/260/370 377/266/378 378/267/379 +f 379/268/380 373/264/374 371/262/372 +f 371/262/372 378/267/379 379/268/380 +f 380/69/381 375/167/376 373/264/374 +f 373/264/374 379/268/380 380/69/381 +f 381/269/382 377/266/378 343/235/344 +f 343/235/344 348/239/349 381/269/382 +f 382/270/383 378/267/379 377/266/378 +f 377/266/378 381/269/382 382/270/383 +f 383/271/384 379/268/380 378/267/379 +f 378/267/379 382/270/383 383/271/384 +f 384/155/385 380/69/381 379/268/380 +f 379/268/380 383/271/384 384/155/385 +f 385/272/386 381/269/382 348/239/349 +f 348/239/349 353/243/354 385/272/386 +f 386/273/387 382/270/383 381/269/382 +f 381/269/382 385/272/386 386/273/387 +f 387/274/388 383/271/384 382/270/383 +f 382/270/383 386/273/387 387/274/388 +f 388/65/389 384/155/385 383/271/384 +f 383/271/384 387/274/388 388/65/389 +f 389/275/390 385/276/386 353/251/354 +f 353/251/354 358/250/359 389/275/390 +f 390/277/391 386/278/387 385/276/386 +f 385/276/386 389/275/390 390/277/391 +f 391/279/392 387/280/388 386/278/387 +f 386/278/387 390/277/391 391/279/392 +f 392/185/393 388/81/389 387/280/388 +f 387/280/388 391/279/392 392/185/393 +f 393/281/394 389/275/390 358/250/359 +f 358/250/359 363/255/364 393/281/394 +f 394/282/395 390/277/391 389/275/390 +f 389/275/390 393/281/394 394/282/395 +f 395/283/396 391/279/392 390/277/391 +f 390/277/391 394/282/395 395/283/396 +f 396/77/397 392/185/393 391/279/392 +f 391/279/392 395/283/396 396/77/397 +f 397/284/398 393/281/394 363/255/364 +f 363/255/364 368/259/369 397/284/398 +f 398/285/399 394/282/395 393/281/394 +f 393/281/394 397/284/398 398/285/399 +f 399/286/400 395/283/396 394/282/395 +f 394/282/395 398/285/399 399/286/400 +f 400/176/401 396/77/397 395/283/396 +f 395/283/396 399/286/400 400/176/401 +f 370/261/371 397/284/398 368/259/369 +f 368/259/369 338/231/339 370/261/371 +f 372/263/373 398/285/399 397/284/398 +f 397/284/398 370/261/371 372/263/373 +f 374/265/375 399/286/400 398/285/399 +f 398/285/399 372/263/373 374/265/375 +f 376/73/377 400/176/401 399/286/400 +f 399/286/400 374/265/375 376/73/377 +f 401/156/402 402/157/403 403/65/404 +f 404/160/405 405/161/406 402/157/403 +f 402/157/403 401/156/402 404/160/405 +f 406/195/407 407/196/408 405/161/406 +f 405/161/406 404/160/405 406/195/407 +f 408/199/409 409/136/410 407/196/408 +f 407/196/408 406/195/407 408/199/409 +f 410/163/411 401/156/402 403/155/404 +f 411/165/412 404/160/405 401/156/402 +f 401/156/402 410/163/411 411/165/412 +f 412/201/413 406/195/407 404/160/405 +f 404/160/405 411/165/412 412/201/413 +f 413/140/414 408/199/409 406/195/407 +f 406/195/407 412/201/413 413/140/414 +f 414/168/415 410/163/411 403/69/404 +f 415/170/416 411/165/412 410/163/411 +f 410/163/411 414/168/415 415/170/416 +f 416/204/417 412/201/413 411/165/412 +f 411/165/412 415/170/416 416/204/417 +f 417/206/418 413/140/414 412/201/413 +f 412/201/413 416/204/417 417/206/418 +f 418/172/419 414/168/415 403/167/404 +f 419/174/420 415/170/416 414/168/415 +f 414/168/415 418/172/419 419/174/420 +f 420/208/421 416/204/417 415/170/416 +f 415/170/416 419/174/420 420/208/421 +f 421/144/422 417/206/418 416/204/417 +f 416/204/417 420/208/421 421/144/422 +f 422/177/423 418/172/419 403/73/404 +f 423/179/424 419/174/420 418/172/419 +f 418/172/419 422/177/423 423/179/424 +f 424/211/425 420/208/421 419/174/420 +f 419/174/420 423/179/424 424/211/425 +f 425/213/426 421/144/422 420/208/421 +f 420/208/421 424/211/425 425/213/426 +f 426/181/427 422/177/423 403/176/404 +f 427/183/428 423/179/424 422/177/423 +f 422/177/423 426/181/427 427/183/428 +f 428/215/429 424/211/425 423/179/424 +f 423/179/424 427/183/428 428/215/429 +f 429/148/430 425/213/426 424/211/425 +f 424/211/425 428/215/429 429/148/430 +f 430/186/431 426/181/427 403/77/404 +f 431/188/432 427/183/428 426/181/427 +f 426/181/427 430/186/431 431/188/432 +f 432/218/433 428/215/429 427/183/428 +f 427/183/428 431/188/432 432/218/433 +f 433/220/434 429/148/430 428/215/429 +f 428/215/429 432/218/433 433/220/434 +f 434/190/435 430/186/431 403/185/404 +f 435/192/436 431/188/432 430/186/431 +f 430/186/431 434/190/435 435/192/436 +f 436/222/437 432/218/433 431/188/432 +f 431/188/432 435/192/436 436/222/437 +f 437/152/438 433/220/434 432/218/433 +f 432/218/433 436/222/437 437/152/438 +f 438/156/439 434/157/435 403/65/404 +f 439/160/440 435/161/436 434/157/435 +f 434/157/435 438/156/439 439/160/440 +f 440/195/441 436/196/437 435/161/436 +f 435/161/436 439/160/440 440/195/441 +f 441/199/442 437/136/438 436/196/437 +f 436/196/437 440/195/441 441/199/442 +f 442/163/443 438/156/439 403/155/404 +f 443/165/444 439/160/440 438/156/439 +f 438/156/439 442/163/443 443/165/444 +f 444/201/445 440/195/441 439/160/440 +f 439/160/440 443/165/444 444/201/445 +f 445/140/446 441/199/442 440/195/441 +f 440/195/441 444/201/445 445/140/446 +f 446/168/447 442/163/443 403/69/404 +f 447/170/448 443/165/444 442/163/443 +f 442/163/443 446/168/447 447/170/448 +f 448/204/449 444/201/445 443/165/444 +f 443/165/444 447/170/448 448/204/449 +f 449/206/450 445/140/446 444/201/445 +f 444/201/445 448/204/449 449/206/450 +f 450/172/451 446/168/447 403/167/404 +f 451/174/452 447/170/448 446/168/447 +f 446/168/447 450/172/451 451/174/452 +f 452/208/453 448/204/449 447/170/448 +f 447/170/448 451/174/452 452/208/453 +f 453/144/454 449/206/450 448/204/449 +f 448/204/449 452/208/453 453/144/454 +f 454/177/455 450/172/451 403/73/404 +f 455/179/456 451/174/452 450/172/451 +f 450/172/451 454/177/455 455/179/456 +f 456/211/457 452/208/453 451/174/452 +f 451/174/452 455/179/456 456/211/457 +f 457/213/458 453/144/454 452/208/453 +f 452/208/453 456/211/457 457/213/458 +f 458/181/459 454/177/455 403/176/404 +f 459/183/460 455/179/456 454/177/455 +f 454/177/455 458/181/459 459/183/460 +f 460/215/461 456/211/457 455/179/456 +f 455/179/456 459/183/460 460/215/461 +f 461/148/462 457/213/458 456/211/457 +f 456/211/457 460/215/461 461/148/462 +f 462/186/463 458/181/459 403/77/404 +f 463/188/464 459/183/460 458/181/459 +f 458/181/459 462/186/463 463/188/464 +f 464/218/465 460/215/461 459/183/460 +f 459/183/460 463/188/464 464/218/465 +f 465/220/466 461/148/462 460/215/461 +f 460/215/461 464/218/465 465/220/466 +f 402/190/403 462/186/463 403/185/404 +f 405/192/406 463/188/464 462/186/463 +f 462/186/463 402/190/403 405/192/406 +f 407/222/408 464/218/465 463/188/464 +f 463/188/464 405/192/406 407/222/408 +f 409/152/410 465/220/466 464/218/465 +f 464/218/465 407/222/408 409/152/410 +f 466/156/467 467/157/468 409/65/410 +f 409/65/410 408/155/409 466/156/467 +f 468/160/469 469/161/470 467/157/468 +f 467/157/468 466/156/467 468/160/469 +f 470/195/471 471/196/472 469/161/470 +f 469/161/470 468/160/469 470/195/471 +f 472/199/473 473/136/474 471/196/472 +f 471/196/472 470/195/471 472/199/473 +f 474/163/475 466/156/467 408/155/409 +f 408/155/409 413/69/414 474/163/475 +f 475/165/476 468/160/469 466/156/467 +f 466/156/467 474/163/475 475/165/476 +f 476/201/477 470/195/471 468/160/469 +f 468/160/469 475/165/476 476/201/477 +f 477/140/478 472/199/473 470/195/471 +f 470/195/471 476/201/477 477/140/478 +f 478/168/479 474/163/475 413/69/414 +f 413/69/414 417/167/418 478/168/479 +f 479/170/480 475/165/476 474/163/475 +f 474/163/475 478/168/479 479/170/480 +f 480/204/481 476/201/477 475/165/476 +f 475/165/476 479/170/480 480/204/481 +f 481/206/482 477/140/478 476/201/477 +f 476/201/477 480/204/481 481/206/482 +f 482/172/483 478/168/479 417/167/418 +f 417/167/418 421/73/422 482/172/483 +f 483/174/484 479/170/480 478/168/479 +f 478/168/479 482/172/483 483/174/484 +f 484/208/485 480/204/481 479/170/480 +f 479/170/480 483/174/484 484/208/485 +f 485/144/486 481/206/482 480/204/481 +f 480/204/481 484/208/485 485/144/486 +f 486/177/487 482/172/483 421/73/422 +f 421/73/422 425/176/426 486/177/487 +f 487/179/488 483/174/484 482/172/483 +f 482/172/483 486/177/487 487/179/488 +f 488/211/489 484/208/485 483/174/484 +f 483/174/484 487/179/488 488/211/489 +f 489/213/490 485/144/486 484/208/485 +f 484/208/485 488/211/489 489/213/490 +f 490/181/491 486/177/487 425/176/426 +f 425/176/426 429/77/430 490/181/491 +f 491/183/492 487/179/488 486/177/487 +f 486/177/487 490/181/491 491/183/492 +f 492/215/493 488/211/489 487/179/488 +f 487/179/488 491/183/492 492/215/493 +f 493/148/494 489/213/490 488/211/489 +f 488/211/489 492/215/493 493/148/494 +f 494/186/495 490/181/491 429/77/430 +f 429/77/430 433/185/434 494/186/495 +f 495/188/496 491/183/492 490/181/491 +f 490/181/491 494/186/495 495/188/496 +f 496/218/497 492/215/493 491/183/492 +f 491/183/492 495/188/496 496/218/497 +f 497/220/498 493/148/494 492/215/493 +f 492/215/493 496/218/497 497/220/498 +f 498/190/499 494/186/495 433/185/434 +f 433/185/434 437/81/438 498/190/499 +f 499/192/500 495/188/496 494/186/495 +f 494/186/495 498/190/499 499/192/500 +f 500/222/501 496/218/497 495/188/496 +f 495/188/496 499/192/500 500/222/501 +f 501/152/502 497/220/498 496/218/497 +f 496/218/497 500/222/501 501/152/502 +f 502/156/503 498/157/499 437/65/438 +f 437/65/438 441/155/442 502/156/503 +f 503/160/504 499/161/500 498/157/499 +f 498/157/499 502/156/503 503/160/504 +f 504/195/505 500/196/501 499/161/500 +f 499/161/500 503/160/504 504/195/505 +f 505/199/506 501/136/502 500/196/501 +f 500/196/501 504/195/505 505/199/506 +f 506/163/507 502/156/503 441/155/442 +f 441/155/442 445/69/446 506/163/507 +f 507/165/508 503/160/504 502/156/503 +f 502/156/503 506/163/507 507/165/508 +f 508/201/509 504/195/505 503/160/504 +f 503/160/504 507/165/508 508/201/509 +f 509/140/510 505/199/506 504/195/505 +f 504/195/505 508/201/509 509/140/510 +f 510/168/511 506/163/507 445/69/446 +f 445/69/446 449/167/450 510/168/511 +f 511/170/512 507/165/508 506/163/507 +f 506/163/507 510/168/511 511/170/512 +f 512/204/513 508/201/509 507/165/508 +f 507/165/508 511/170/512 512/204/513 +f 513/206/514 509/140/510 508/201/509 +f 508/201/509 512/204/513 513/206/514 +f 514/172/515 510/168/511 449/167/450 +f 449/167/450 453/73/454 514/172/515 +f 515/174/516 511/170/512 510/168/511 +f 510/168/511 514/172/515 515/174/516 +f 516/208/517 512/204/513 511/170/512 +f 511/170/512 515/174/516 516/208/517 +f 517/144/518 513/206/514 512/204/513 +f 512/204/513 516/208/517 517/144/518 +f 518/177/519 514/172/515 453/73/454 +f 453/73/454 457/176/458 518/177/519 +f 519/179/520 515/174/516 514/172/515 +f 514/172/515 518/177/519 519/179/520 +f 520/211/521 516/208/517 515/174/516 +f 515/174/516 519/179/520 520/211/521 +f 521/213/522 517/144/518 516/208/517 +f 516/208/517 520/211/521 521/213/522 +f 522/181/523 518/177/519 457/176/458 +f 457/176/458 461/77/462 522/181/523 +f 523/183/524 519/179/520 518/177/519 +f 518/177/519 522/181/523 523/183/524 +f 524/215/525 520/211/521 519/179/520 +f 519/179/520 523/183/524 524/215/525 +f 525/148/526 521/213/522 520/211/521 +f 520/211/521 524/215/525 525/148/526 +f 526/186/527 522/181/523 461/77/462 +f 461/77/462 465/185/466 526/186/527 +f 527/188/528 523/183/524 522/181/523 +f 522/181/523 526/186/527 527/188/528 +f 528/218/529 524/215/525 523/183/524 +f 523/183/524 527/188/528 528/218/529 +f 529/220/530 525/148/526 524/215/525 +f 524/215/525 528/218/529 529/220/530 +f 467/190/468 526/186/527 465/185/466 +f 465/185/466 409/81/410 467/190/468 +f 469/192/470 527/188/528 526/186/527 +f 526/186/527 467/190/468 469/192/470 +f 471/222/472 528/218/529 527/188/528 +f 527/188/528 469/192/470 471/222/472 +f 473/152/474 529/220/530 528/218/529 +f 528/218/529 471/222/472 473/152/474 +# 992 faces + diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta new file mode 100644 index 0000000..2f76cd7 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta @@ -0,0 +1,77 @@ +fileFormatVersion: 2 +guid: 53158f4ed39ed53448df438bc212f7e8 +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 100002: Teapot001 + 400000: //RootNode + 400002: Teapot001 + 2300000: Teapot001 + 3300000: Teapot001 + 4300000: Teapot001 + 9500000: //RootNode + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleRotations: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 0.1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 1 + tangentImportMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj new file mode 100644 index 0000000..eea5a08 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj @@ -0,0 +1,3506 @@ +# File exported by Unity3D version 5.3.5f1 +v 17.34540000 -6.93540000 33.21890000 +v 18.78210000 0.34050000 33.21890000 +v 19.04430000 0.34050000 32.22750000 +v 17.58740000 -7.03830000 32.22750000 +v 17.62610000 -7.05480000 33.54940000 +v 19.08630000 0.34050000 33.54940000 +v 18.19710000 -7.29770000 33.21890000 +v 19.70530000 0.34050000 33.21890000 +v 18.82610000 -7.56540000 32.22750000 +v 20.38720000 0.34050000 32.22750000 +v 13.40630000 -12.82090000 33.21890000 +v 13.59250000 -13.00710000 32.22750000 +v 13.62230000 -13.03690000 33.54940000 +v 14.06180000 -13.47640000 33.21890000 +v 14.54590000 -13.96050000 32.22750000 +v 7.52080000 -16.76000000 33.21890000 +v 7.62370000 -17.00200000 32.22750000 +v 7.64020000 -17.04070000 33.54940000 +v 7.88310000 -17.61170000 33.21890000 +v 8.15080000 -18.24070000 32.22750000 +v 0.24490000 -18.19670000 33.21890000 +v 0.24490000 -18.45890000 32.22750000 +v 0.24490000 -18.50090000 33.54940000 +v 0.24490000 -19.11990000 33.21890000 +v 0.24490000 -19.80180000 32.22750000 +v -7.24600000 -16.76000000 33.21890000 +v -7.64370000 -17.00200000 32.22750000 +v -7.21400000 -17.04070000 33.54940000 +v -7.40120000 -17.61170000 33.21890000 +v -7.66090000 -18.24070000 32.22750000 +v -13.10760000 -12.82090000 33.21890000 +v -13.55580000 -13.00710000 32.22750000 +v -13.18910000 -13.03690000 33.54940000 +v -13.57900000 -13.47640000 33.21890000 +v -14.05600000 -13.96050000 32.22750000 +v -16.92720000 -6.93540000 33.21890000 +v -17.26740000 -7.03830000 32.22750000 +v -17.15740000 -7.05480000 33.54940000 +v -17.70980000 -7.29770000 33.21890000 +v -18.33620000 -7.56540000 32.22750000 +v -18.29220000 0.34050000 33.21890000 +v -18.55440000 0.34050000 32.22750000 +v -18.59640000 0.34050000 33.54940000 +v -19.21540000 0.34050000 33.21890000 +v -19.89730000 0.34050000 32.22750000 +v -16.85560000 7.61630000 33.21890000 +v -18.29220000 0.34050000 33.21890000 +v -18.55440000 0.34050000 32.22750000 +v -17.09750000 7.71920000 32.22750000 +v -17.13620000 7.73570000 33.54940000 +v -18.59640000 0.34050000 33.54940000 +v -17.70720000 7.97860000 33.21890000 +v -19.21540000 0.34050000 33.21890000 +v -18.33620000 8.24630000 32.22750000 +v -19.89730000 0.34050000 32.22750000 +v -12.91640000 13.50180000 33.21890000 +v -13.10260000 13.68800000 32.22750000 +v -13.13240000 13.71780000 33.54940000 +v -13.57190000 14.15730000 33.21890000 +v -14.05600000 14.64140000 32.22750000 +v -7.03090000 17.44100000 33.21890000 +v -7.13380000 17.68290000 32.22750000 +v -7.15030000 17.72160000 33.54940000 +v -7.39320000 18.29260000 33.21890000 +v -7.66090000 18.92160000 32.22750000 +v 0.24490000 18.87760000 33.21890000 +v 0.24490000 19.13990000 32.22750000 +v 0.24490000 19.18180000 33.54940000 +v 0.24490000 19.80080000 33.21890000 +v 0.24490000 20.48270000 32.22750000 +v 7.52080000 17.44100000 33.21890000 +v 7.62370000 17.68290000 32.22750000 +v 7.64020000 17.72160000 33.54940000 +v 7.88310000 18.29260000 33.21890000 +v 8.15080000 18.92160000 32.22750000 +v 13.40630000 13.50180000 33.21890000 +v 13.59250000 13.68800000 32.22750000 +v 13.62230000 13.71780000 33.54940000 +v 14.06180000 14.15730000 33.21890000 +v 14.54590000 14.64140000 32.22750000 +v 17.34550000 7.61630000 33.21890000 +v 17.58740000 7.71920000 32.22750000 +v 17.62610000 7.73570000 33.54940000 +v 18.19710000 7.97860000 33.21890000 +v 18.82610000 8.24630000 32.22750000 +v 18.78210000 0.34050000 33.21890000 +v 19.04430000 0.34050000 32.22750000 +v 19.08630000 0.34050000 33.54940000 +v 19.70530000 0.34050000 33.21890000 +v 20.38720000 0.34050000 32.22750000 +v 21.10040000 -8.53300000 26.95590000 +v 22.85250000 0.34050000 26.95590000 +v 23.08430000 -9.37710000 21.77880000 +v 25.00310000 0.34050000 21.77880000 +v 24.48760000 -9.97420000 16.79040000 +v 26.52420000 0.34050000 16.79040000 +v 25.01990000 -10.20060000 12.08530000 +v 27.10120000 0.34050000 12.08530000 +v 16.29630000 -15.71090000 26.95590000 +v 17.82320000 -17.23780000 21.77880000 +v 18.90320000 -18.31780000 16.79040000 +v 19.31290000 -18.72750000 12.08530000 +v 9.11840000 -20.51500000 26.95590000 +v 9.96250000 -22.49890000 21.77880000 +v 10.55960000 -23.90220000 16.79040000 +v 10.78600000 -24.43450000 12.08530000 +v 0.24490000 -22.26710000 26.95590000 +v 0.24490000 -24.41770000 21.77880000 +v 0.24490000 -25.93880000 16.79040000 +v 0.24490000 -26.51580000 12.08530000 +v -8.62850000 -20.51500000 26.95590000 +v -9.47260000 -22.49890000 21.77880000 +v -10.06970000 -23.90220000 16.79040000 +v -10.29610000 -24.43450000 12.08530000 +v -15.80640000 -15.71090000 26.95590000 +v -17.33330000 -17.23780000 21.77880000 +v -18.41330000 -18.31780000 16.79040000 +v -18.82300000 -18.72750000 12.08530000 +v -20.61050000 -8.53300000 26.95590000 +v -22.59440000 -9.37710000 21.77880000 +v -23.99770000 -9.97420000 16.79040000 +v -24.53000000 -10.20060000 12.08530000 +v -22.36260000 0.34050000 26.95590000 +v -24.51320000 0.34050000 21.77880000 +v -26.03430000 0.34050000 16.79040000 +v -26.61130000 0.34050000 12.08530000 +v -20.61050000 9.21390000 26.95590000 +v -22.36260000 0.34050000 26.95590000 +v -22.59440000 10.05800000 21.77880000 +v -24.51320000 0.34050000 21.77880000 +v -23.99770000 10.65510000 16.79040000 +v -26.03430000 0.34050000 16.79040000 +v -24.53000000 10.88150000 12.08530000 +v -26.61130000 0.34050000 12.08530000 +v -15.80640000 16.39180000 26.95590000 +v -17.33330000 17.91870000 21.77880000 +v -18.41330000 18.99880000 16.79040000 +v -18.82300000 19.40840000 12.08530000 +v -8.62850000 21.19590000 26.95590000 +v -9.47260000 23.17980000 21.77880000 +v -10.06970000 24.58310000 16.79040000 +v -10.29610000 25.11540000 12.08530000 +v 0.24490000 22.94800000 26.95590000 +v 0.24490000 25.09860000 21.77880000 +v 0.24490000 26.61970000 16.79040000 +v 0.24490000 27.19670000 12.08530000 +v 9.11840000 21.19590000 26.95590000 +v 9.96250000 23.17980000 21.77880000 +v 10.55960000 24.58310000 16.79040000 +v 10.78600000 25.11540000 12.08530000 +v 16.29630000 16.39180000 26.95590000 +v 17.82320000 17.91870000 21.77880000 +v 18.90320000 18.99880000 16.79040000 +v 19.31290000 19.40840000 12.08530000 +v 21.10040000 9.21390000 26.95590000 +v 23.08430000 10.05800000 21.77880000 +v 24.48760000 10.65510000 16.79040000 +v 25.01990000 10.88150000 12.08530000 +v 22.85250000 0.34050000 26.95590000 +v 25.00310000 0.34050000 21.77880000 +v 26.52420000 0.34050000 16.79040000 +v 27.10120000 0.34050000 12.08530000 +v 24.05210000 -9.78890000 8.10410000 +v 26.05220000 0.34050000 8.10410000 +v 21.92300000 -8.88300000 5.16140000 +v 23.74420000 0.34050000 5.16140000 +v 19.79390000 -7.97710000 3.16300000 +v 21.43620000 0.34050000 3.16300000 +v 18.82610000 -7.56540000 2.01420000 +v 20.38720000 0.34050000 2.01420000 +v 18.56810000 -17.98270000 8.10410000 +v 16.92940000 -16.34400000 5.16140000 +v 15.29080000 -14.70540000 3.16300000 +v 14.54590000 -13.96050000 2.01420000 +v 10.37430000 -23.46670000 8.10410000 +v 9.46840000 -21.33760000 5.16140000 +v 8.56250000 -19.20850000 3.16300000 +v 8.15080000 -18.24070000 2.01420000 +v 0.24490000 -25.46680000 8.10410000 +v 0.24490000 -23.15880000 5.16140000 +v 0.24490000 -20.85080000 3.16300000 +v 0.24490000 -19.80180000 2.01420000 +v -9.88440000 -23.46670000 8.10410000 +v -8.97850000 -21.33760000 5.16140000 +v -8.07260000 -19.20850000 3.16300000 +v -7.66090000 -18.24070000 2.01420000 +v -18.07820000 -17.98270000 8.10410000 +v -16.43950000 -16.34400000 5.16140000 +v -14.80090000 -14.70540000 3.16300000 +v -14.05600000 -13.96050000 2.01420000 +v -23.56220000 -9.78890000 8.10410000 +v -21.43310000 -8.88300000 5.16140000 +v -19.30400000 -7.97710000 3.16300000 +v -18.33620000 -7.56540000 2.01420000 +v -25.56230000 0.34050000 8.10410000 +v -23.25430000 0.34050000 5.16140000 +v -20.94630000 0.34050000 3.16300000 +v -19.89730000 0.34050000 2.01420000 +v -23.56220000 10.46980000 8.10410000 +v -25.56230000 0.34050000 8.10410000 +v -21.43310000 9.56390000 5.16140000 +v -23.25430000 0.34050000 5.16140000 +v -19.30400000 8.65800000 3.16300000 +v -20.94630000 0.34050000 3.16300000 +v -18.33620000 8.24630000 2.01420000 +v -19.89730000 0.34050000 2.01420000 +v -18.07820000 18.66360000 8.10410000 +v -16.43950000 17.02490000 5.16140000 +v -14.80090000 15.38630000 3.16300000 +v -14.05600000 14.64140000 2.01420000 +v -9.88440000 24.14760000 8.10410000 +v -8.97850000 22.01850000 5.16140000 +v -8.07260000 19.88940000 3.16300000 +v -7.66090000 18.92160000 2.01420000 +v 0.24490000 26.14770000 8.10410000 +v 0.24490000 23.83970000 5.16140000 +v 0.24490000 21.53170000 3.16300000 +v 0.24490000 20.48270000 2.01420000 +v 10.37430000 24.14760000 8.10410000 +v 9.46840000 22.01850000 5.16140000 +v 8.56250000 19.88940000 3.16300000 +v 8.15080000 18.92160000 2.01420000 +v 18.56810000 18.66360000 8.10410000 +v 16.92940000 17.02490000 5.16140000 +v 15.29080000 15.38630000 3.16300000 +v 14.54590000 14.64140000 2.01420000 +v 24.05210000 10.46980000 8.10410000 +v 21.92300000 9.56390000 5.16140000 +v 19.79390000 8.65800000 3.16300000 +v 18.82610000 8.24630000 2.01420000 +v 26.05220000 0.34050000 8.10410000 +v 23.74420000 0.34050000 5.16140000 +v 21.43620000 0.34050000 3.16300000 +v 20.38720000 0.34050000 2.01420000 +v 18.40520000 -7.38620000 1.27460000 +v 19.93080000 0.34050000 1.27460000 +v 16.15510000 -6.42890000 0.62940000 +v 17.49170000 0.34050000 0.62940000 +v 10.59530000 -4.06330000 0.17310000 +v 11.46480000 0.34050000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v 14.22190000 -13.63650000 1.27460000 +v 12.49020000 -11.90480000 0.62940000 +v 8.21100000 -7.62560000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v 7.97170000 -17.81980000 1.27460000 +v 7.01430000 -15.56970000 0.62940000 +v 4.64870000 -10.00980000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v 0.24490000 -19.34540000 1.27460000 +v 0.24490000 -16.90630000 0.62940000 +v 0.24490000 -10.87940000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -7.48180000 -17.81980000 1.27460000 +v -6.52440000 -15.56970000 0.62940000 +v -4.15880000 -10.00980000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -13.73200000 -13.63650000 1.27460000 +v -12.00030000 -11.90480000 0.62940000 +v -7.72110000 -7.62560000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -17.91530000 -7.38620000 1.27460000 +v -15.66520000 -6.42890000 0.62940000 +v -10.10540000 -4.06330000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -19.44090000 0.34050000 1.27460000 +v -17.00180000 0.34050000 0.62940000 +v -10.97490000 0.34050000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -17.91530000 8.06720000 1.27460000 +v -19.44090000 0.34050000 1.27460000 +v -15.66520000 7.10980000 0.62940000 +v -17.00180000 0.34050000 0.62940000 +v -10.10540000 4.74420000 0.17310000 +v -10.97490000 0.34050000 0.17310000 +v -13.73200000 14.31740000 1.27460000 +v -12.00030000 12.58570000 0.62940000 +v -7.72110000 8.30650000 0.17310000 +v -7.48180000 18.50070000 1.27460000 +v -6.52440000 16.25060000 0.62940000 +v -4.15880000 10.69080000 0.17310000 +v 0.24490000 20.02630000 1.27460000 +v 0.24490000 17.58720000 0.62940000 +v 0.24490000 11.56030000 0.17310000 +v 7.97170000 18.50070000 1.27460000 +v 7.01430000 16.25060000 0.62940000 +v 4.64870000 10.69080000 0.17310000 +v 14.22190000 14.31740000 1.27460000 +v 12.49020000 12.58570000 0.62940000 +v 8.21100000 8.30650000 0.17310000 +v 18.40520000 8.06720000 1.27460000 +v 16.15510000 7.10980000 0.62940000 +v 10.59530000 4.74420000 0.17310000 +v 19.93080000 0.34050000 1.27460000 +v 17.49170000 0.34050000 0.62940000 +v 11.46480000 0.34050000 0.17310000 +v -27.70040000 -1.92550000 27.60950000 +v -27.51350000 0.34050000 27.14480000 +v -21.24010000 0.34050000 27.19200000 +v -21.03030000 -1.92550000 27.66410000 +v -32.59630000 -1.92550000 27.22740000 +v -32.15040000 0.34050000 26.81430000 +v -35.61170000 -1.92550000 26.19030000 +v -35.02490000 0.34050000 25.91740000 +v -36.64050000 -1.92550000 24.17070000 +v -36.01100000 0.34050000 24.17070000 +v -28.11150000 -2.68090000 28.63180000 +v -20.56870000 -2.68090000 28.70270000 +v -33.57720000 -2.68090000 28.13620000 +v -36.90270000 -2.68090000 26.79070000 +v -38.02520000 -2.68090000 24.17070000 +v -28.52260000 -1.92550000 29.65420000 +v -20.10710000 -1.92550000 29.74120000 +v -34.55810000 -1.92550000 29.04490000 +v -38.19380000 -1.92550000 27.39110000 +v -39.41000000 -1.92550000 24.17070000 +v -28.70950000 0.34050000 30.11890000 +v -19.89730000 0.34050000 30.21330000 +v -35.00390000 0.34050000 29.45800000 +v -38.78060000 0.34050000 27.66410000 +v -40.03950000 0.34050000 24.17070000 +v -28.52260000 2.60650000 29.65420000 +v -20.10710000 2.60650000 29.74120000 +v -34.55810000 2.60650000 29.04490000 +v -38.19380000 2.60650000 27.39110000 +v -39.41000000 2.60650000 24.17070000 +v -28.11150000 3.36180000 28.63180000 +v -20.56870000 3.36180000 28.70270000 +v -33.57720000 3.36180000 28.13620000 +v -36.90270000 3.36180000 26.79070000 +v -38.02530000 3.36180000 24.17070000 +v -27.70040000 2.60650000 27.60950000 +v -21.03030000 2.60650000 27.66410000 +v -32.59630000 2.60650000 27.22740000 +v -35.61170000 2.60650000 26.19030000 +v -36.64050000 2.60650000 24.17070000 +v -27.51350000 0.34050000 27.14480000 +v -21.24010000 0.34050000 27.19200000 +v -32.15040000 0.34050000 26.81430000 +v -35.02490000 0.34050000 25.91740000 +v -36.01100000 0.34050000 24.17070000 +v -36.05860000 -1.92550000 21.16830000 +v -35.48650000 0.34050000 21.43260000 +v -34.23550000 -1.92550000 17.72480000 +v -33.82900000 0.34050000 18.12800000 +v -31.05510000 -1.92550000 14.32550000 +v -30.91250000 0.34050000 14.82340000 +v -26.40150000 -1.92550000 11.45590000 +v -26.61130000 0.34050000 12.08530000 +v -37.31710000 -2.68090000 20.58680000 +v -35.12980000 -2.68090000 16.83760000 +v -31.36890000 -2.68090000 13.23010000 +v -25.93990000 -2.68090000 10.07110000 +v -38.57570000 -1.92550000 20.00530000 +v -36.02410000 -1.92550000 15.95050000 +v -31.68260000 -1.92550000 12.13470000 +v -25.47830000 -1.92550000 8.68630000 +v -39.14780000 0.34050000 19.74090000 +v -36.43070000 0.34050000 15.54730000 +v -31.82520000 0.34050000 11.63680000 +v -25.26850000 0.34050000 8.05690000 +v -38.57570000 2.60650000 20.00530000 +v -36.02410000 2.60650000 15.95050000 +v -31.68260000 2.60650000 12.13470000 +v -25.47830000 2.60650000 8.68630000 +v -37.31710000 3.36180000 20.58680000 +v -35.12980000 3.36180000 16.83760000 +v -31.36890000 3.36180000 13.23010000 +v -25.93990000 3.36180000 10.07110000 +v -36.05860000 2.60650000 21.16830000 +v -34.23550000 2.60650000 17.72480000 +v -31.05510000 2.60650000 14.32550000 +v -26.40150000 2.60650000 11.45590000 +v -35.48650000 0.34050000 21.43260000 +v -33.82900000 0.34050000 18.12800000 +v -30.91250000 0.34050000 14.82340000 +v -26.61130000 0.34050000 12.08530000 +v 30.00580000 -4.16090000 19.33080000 +v 29.51410000 0.34050000 20.61430000 +v 23.07280000 0.34050000 19.13510000 +v 23.07280000 -4.64470000 17.40410000 +v 32.93410000 -3.09630000 23.42320000 +v 32.30460000 0.34050000 24.17070000 +v 34.60340000 -2.03180000 28.21190000 +v 33.83630000 0.34050000 28.48230000 +v 37.75980000 -1.54790000 32.22750000 +v 36.50090000 0.34050000 32.22750000 +v 31.08770000 -5.66130000 16.50720000 +v 23.07280000 -6.30650000 13.59600000 +v 34.31890000 -4.24190000 21.77880000 +v 36.29110000 -2.82250000 27.61690000 +v 40.52940000 -2.17730000 32.22750000 +v 32.16960000 -4.16090000 13.68350000 +v 23.07280000 -4.64470000 9.78790000 +v 35.70360000 -3.09630000 20.13430000 +v 37.97880000 -2.03180000 27.02180000 +v 43.29890000 -1.54790000 32.22750000 +v 32.66130000 0.34050000 12.40010000 +v 23.07280000 0.34050000 8.05690000 +v 36.33310000 0.34050000 19.38690000 +v 38.74590000 0.34050000 26.75140000 +v 44.55780000 0.34050000 32.22750000 +v 32.16960000 4.84180000 13.68350000 +v 32.66130000 0.34050000 12.40010000 +v 23.07280000 0.34050000 8.05690000 +v 23.07280000 5.32570000 9.78790000 +v 35.70360000 3.77720000 20.13430000 +v 36.33310000 0.34050000 19.38690000 +v 37.97880000 2.71270000 27.02180000 +v 38.74590000 0.34050000 26.75140000 +v 43.29890000 2.22880000 32.22750000 +v 44.55780000 0.34050000 32.22750000 +v 31.08770000 6.34220000 16.50720000 +v 23.07280000 6.98740000 13.59600000 +v 34.31890000 4.92280000 21.77880000 +v 36.29110000 3.50340000 27.61690000 +v 40.52940000 2.85820000 32.22750000 +v 30.00580000 4.84180000 19.33080000 +v 23.07280000 5.32570000 17.40410000 +v 32.93410000 3.77720000 23.42320000 +v 34.60340000 2.71270000 28.21190000 +v 37.75980000 2.22880000 32.22750000 +v 38.81430000 -1.42990000 32.82170000 +v 37.46610000 0.34050000 32.79400000 +v 39.44490000 -1.17020000 33.02710000 +v 38.17940000 0.34050000 32.98290000 +v 39.46370000 -0.91060000 32.83280000 +v 38.38930000 0.34050000 32.79400000 +v 38.68300000 -0.79250000 32.22750000 +v 37.84370000 0.34050000 32.22750000 +v 41.78040000 -2.02000000 32.88260000 +v 42.22890000 -1.67380000 33.12450000 +v 41.82760000 -1.32760000 32.91800000 +v 40.52940000 -1.17020000 32.22750000 +v 44.74650000 -1.42990000 32.94340000 +v 45.01290000 -1.17020000 33.22190000 +v 44.19150000 -0.91060000 33.00320000 +v 42.37570000 -0.79250000 32.22750000 +v 46.09470000 0.34050000 32.97110000 +v 46.27830000 0.34050000 33.26610000 +v 45.26590000 0.34050000 33.04190000 +v 43.21500000 0.34050000 32.22750000 +v 44.74650000 2.11080000 32.94340000 +v 46.09470000 0.34050000 32.97110000 +v 45.01290000 1.85110000 33.22190000 +v 46.27830000 0.34050000 33.26610000 +v 44.19150000 1.59150000 33.00320000 +v 45.26590000 0.34050000 33.04190000 +v 42.37570000 1.47350000 32.22750000 +v 43.21500000 0.34050000 32.22750000 +v 41.78040000 2.70090000 32.88260000 +v 42.22890000 2.35470000 33.12450000 +v 41.82760000 2.00850000 32.91800000 +v 40.52940000 1.85110000 32.22750000 +v 38.81430000 2.11080000 32.82170000 +v 39.44490000 1.85110000 33.02710000 +v 39.46370000 1.59150000 32.83280000 +v 38.68300000 1.47350000 32.22750000 +v 4.46600000 -1.45960000 41.63770000 +v 4.81890000 0.34050000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 4.27230000 -1.37670000 40.03260000 +v 4.60910000 0.34050000 40.03260000 +v 2.68430000 -0.69880000 38.04990000 +v 2.88860000 0.34050000 38.04990000 +v 2.72240000 -0.71370000 36.25600000 +v 2.93060000 0.34050000 36.25600000 +v 3.49670000 -2.91130000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 3.34730000 -2.76190000 40.03260000 +v 2.12340000 -1.53800000 38.04990000 +v 2.15170000 -1.56630000 36.25600000 +v 2.04500000 -3.88060000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 1.96210000 -3.68690000 40.03260000 +v 1.28420000 -2.09890000 38.04990000 +v 1.29910000 -2.13700000 36.25600000 +v 0.24490000 -4.23350000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 0.24490000 -4.02370000 40.03260000 +v 0.24490000 -2.30320000 38.04990000 +v 0.24490000 -2.34520000 36.25600000 +v -1.55510000 -3.88060000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -1.47220000 -3.68690000 40.03260000 +v -0.79430000 -2.09890000 38.04990000 +v -0.80920000 -2.13700000 36.25600000 +v -3.00680000 -2.91130000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -2.85740000 -2.76190000 40.03260000 +v -1.63350000 -1.53800000 38.04990000 +v -1.66180000 -1.56630000 36.25600000 +v -3.97610000 -1.45960000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -3.78240000 -1.37670000 40.03260000 +v -2.19440000 -0.69880000 38.04990000 +v -2.23250000 -0.71370000 36.25600000 +v -4.32900000 0.34050000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -4.11920000 0.34050000 40.03260000 +v -2.39870000 0.34050000 38.04990000 +v -2.44070000 0.34050000 36.25600000 +v -3.97610000 2.14050000 41.63770000 +v -4.32900000 0.34050000 41.63770000 +v -3.78240000 2.05760000 40.03260000 +v -4.11920000 0.34050000 40.03260000 +v -2.19440000 1.37970000 38.04990000 +v -2.39870000 0.34050000 38.04990000 +v -2.23250000 1.39460000 36.25600000 +v -2.44070000 0.34050000 36.25600000 +v -3.00680000 3.59220000 41.63770000 +v -2.85740000 3.44280000 40.03260000 +v -1.63350000 2.21890000 38.04990000 +v -1.66180000 2.24730000 36.25600000 +v -1.55510000 4.56150000 41.63770000 +v -1.47220000 4.36780000 40.03260000 +v -0.79430000 2.77980000 38.04990000 +v -0.80920000 2.81790000 36.25600000 +v 0.24490000 4.91440000 41.63770000 +v 0.24490000 4.70460000 40.03260000 +v 0.24490000 2.98410000 38.04990000 +v 0.24490000 3.02610000 36.25600000 +v 2.04500000 4.56150000 41.63770000 +v 1.96210000 4.36780000 40.03260000 +v 1.28420000 2.77980000 38.04990000 +v 1.29910000 2.81790000 36.25600000 +v 3.49670000 3.59220000 41.63770000 +v 3.34730000 3.44280000 40.03260000 +v 2.12340000 2.21890000 38.04990000 +v 2.15170000 2.24730000 36.25600000 +v 4.46600000 2.14050000 41.63770000 +v 4.27230000 2.05760000 40.03260000 +v 2.68430000 1.37970000 38.04990000 +v 2.72240000 1.39460000 36.25600000 +v 4.81890000 0.34050000 41.63770000 +v 4.60910000 0.34050000 40.03260000 +v 2.88860000 0.34050000 38.04990000 +v 2.93060000 0.34050000 36.25600000 +v 5.89670000 -2.06420000 35.06000000 +v 6.37150000 0.34050000 35.06000000 +v 2.93060000 0.34050000 36.25600000 +v 2.72240000 -0.71370000 36.25600000 +v 10.46460000 -4.00770000 34.24180000 +v 11.32320000 0.34050000 34.24180000 +v 14.56790000 -5.75360000 33.42350000 +v 15.77120000 0.34050000 33.42350000 +v 16.34860000 -6.51130000 32.22750000 +v 17.70150000 0.34050000 32.22750000 +v 4.59480000 -4.00940000 35.06000000 +v 2.15170000 -1.56630000 36.25600000 +v 8.11050000 -7.52510000 34.24180000 +v 11.26860000 -10.68320000 33.42350000 +v 12.63910000 -12.05370000 32.22750000 +v 2.64960000 -5.31130000 35.06000000 +v 1.29910000 -2.13700000 36.25600000 +v 4.59310000 -9.87920000 34.24180000 +v 6.33900000 -13.98250000 33.42350000 +v 7.09670000 -15.76320000 32.22750000 +v 0.24490000 -5.78610000 35.06000000 +v 0.24490000 -2.34520000 36.25600000 +v 0.24490000 -10.73780000 34.24180000 +v 0.24490000 -15.18580000 33.42350000 +v 0.24490000 -17.11610000 32.22750000 +v -2.15970000 -5.31130000 35.06000000 +v -0.80920000 -2.13700000 36.25600000 +v -4.10330000 -9.87920000 34.24180000 +v -5.84910000 -13.98250000 33.42350000 +v -6.60680000 -15.76320000 32.22750000 +v -4.10490000 -4.00940000 35.06000000 +v -1.66180000 -1.56630000 36.25600000 +v -7.62060000 -7.52510000 34.24180000 +v -10.77870000 -10.68320000 33.42350000 +v -12.14920000 -12.05370000 32.22750000 +v -5.40680000 -2.06420000 35.06000000 +v -2.23250000 -0.71370000 36.25600000 +v -9.97470000 -4.00770000 34.24180000 +v -14.07810000 -5.75360000 33.42350000 +v -15.85870000 -6.51130000 32.22750000 +v -5.88160000 0.34050000 35.06000000 +v -2.44070000 0.34050000 36.25600000 +v -10.83330000 0.34050000 34.24180000 +v -15.28130000 0.34050000 33.42350000 +v -17.21160000 0.34050000 32.22750000 +v -5.40680000 2.74510000 35.06000000 +v -5.88160000 0.34050000 35.06000000 +v -2.44070000 0.34050000 36.25600000 +v -2.23250000 1.39460000 36.25600000 +v -9.97470000 4.68870000 34.24180000 +v -10.83330000 0.34050000 34.24180000 +v -14.07810000 6.43450000 33.42350000 +v -15.28130000 0.34050000 33.42350000 +v -15.85870000 7.19220000 32.22750000 +v -17.21160000 0.34050000 32.22750000 +v -4.10490000 4.69030000 35.06000000 +v -1.66180000 2.24730000 36.25600000 +v -7.62060000 8.20600000 34.24180000 +v -10.77870000 11.36410000 33.42350000 +v -12.14920000 12.73460000 32.22750000 +v -2.15970000 5.99220000 35.06000000 +v -0.80920000 2.81790000 36.25600000 +v -4.10330000 10.56010000 34.24180000 +v -5.84910000 14.66350000 33.42350000 +v -6.60680000 16.44420000 32.22750000 +v 0.24490000 6.46700000 35.06000000 +v 0.24490000 3.02610000 36.25600000 +v 0.24490000 11.41870000 34.24180000 +v 0.24490000 15.86670000 33.42350000 +v 0.24490000 17.79700000 32.22750000 +v 2.64960000 5.99220000 35.06000000 +v 1.29910000 2.81790000 36.25600000 +v 4.59310000 10.56010000 34.24180000 +v 6.33900000 14.66350000 33.42350000 +v 7.09670000 16.44420000 32.22750000 +v 4.59480000 4.69030000 35.06000000 +v 2.15170000 2.24730000 36.25600000 +v 8.11050000 8.20600000 34.24180000 +v 11.26860000 11.36410000 33.42350000 +v 12.63910000 12.73460000 32.22750000 +v 5.89670000 2.74510000 35.06000000 +v 2.72240000 1.39460000 36.25600000 +v 10.46460000 4.68870000 34.24180000 +v 14.56790000 6.43450000 33.42350000 +v 16.34860000 7.19220000 32.22750000 +v 6.37150000 0.34050000 35.06000000 +v 2.93060000 0.34050000 36.25600000 +v 11.32320000 0.34050000 34.24180000 +v 15.77120000 0.34050000 33.42350000 +v 17.70150000 0.34050000 32.22750000 +vt 1.75000 1.97500 +vt 2.00000 1.97500 +vt 2.00000 2.00000 +vt 1.75000 2.00000 +vt 1.75000 1.95000 +vt 2.00000 1.95000 +vt 1.75000 1.92500 +vt 2.00000 1.92500 +vt 1.75000 1.90000 +vt 2.00000 1.90000 +vt 1.50000 1.97500 +vt 1.50000 2.00000 +vt 1.50000 1.95000 +vt 1.50000 1.92500 +vt 1.50000 1.90000 +vt 1.25000 1.97500 +vt 1.25000 2.00000 +vt 1.25000 1.95000 +vt 1.25000 1.92500 +vt 1.25000 1.90000 +vt 1.00000 1.97500 +vt 1.00000 2.00000 +vt 1.00000 1.95000 +vt 1.00000 1.92500 +vt 1.00000 1.90000 +vt 0.75000 1.97500 +vt 0.75000 2.00000 +vt 0.75000 1.95000 +vt 0.75000 1.92500 +vt 0.75000 1.90000 +vt 0.50000 1.97500 +vt 0.50000 2.00000 +vt 0.50000 1.95000 +vt 0.50000 1.92500 +vt 0.50000 1.90000 +vt 0.25000 1.97500 +vt 0.25000 2.00000 +vt 0.25000 1.95000 +vt 0.25000 1.92500 +vt 0.25000 1.90000 +vt 0.00000 1.97500 +vt 0.00000 2.00000 +vt 0.00000 1.95000 +vt 0.00000 1.92500 +vt 0.00000 1.90000 +vt 1.75000 1.97500 +vt 2.00000 1.97500 +vt 2.00000 2.00000 +vt 1.75000 2.00000 +vt 1.75000 1.95000 +vt 2.00000 1.95000 +vt 1.75000 1.92500 +vt 2.00000 1.92500 +vt 1.75000 1.90000 +vt 2.00000 1.90000 +vt 1.50000 1.97500 +vt 1.50000 2.00000 +vt 1.50000 1.95000 +vt 1.50000 1.92500 +vt 1.50000 1.90000 +vt 1.25000 1.97500 +vt 1.25000 2.00000 +vt 1.25000 1.95000 +vt 1.25000 1.92500 +vt 1.25000 1.90000 +vt 1.00000 1.97500 +vt 1.00000 2.00000 +vt 1.00000 1.95000 +vt 1.00000 1.92500 +vt 1.00000 1.90000 +vt 0.75000 1.97500 +vt 0.75000 2.00000 +vt 0.75000 1.95000 +vt 0.75000 1.92500 +vt 0.75000 1.90000 +vt 0.50000 1.97500 +vt 0.50000 2.00000 +vt 0.50000 1.95000 +vt 0.50000 1.92500 +vt 0.50000 1.90000 +vt 0.25000 1.97500 +vt 0.25000 2.00000 +vt 0.25000 1.95000 +vt 0.25000 1.92500 +vt 0.25000 1.90000 +vt 0.00000 1.97500 +vt 0.00000 2.00000 +vt 0.00000 1.95000 +vt 0.00000 1.92500 +vt 0.00000 1.90000 +vt 1.75000 1.67500 +vt 2.00000 1.67500 +vt 1.75000 1.45000 +vt 2.00000 1.45000 +vt 1.75000 1.22500 +vt 2.00000 1.22500 +vt 1.75000 1.00000 +vt 2.00000 1.00000 +vt 1.50000 1.67500 +vt 1.50000 1.45000 +vt 1.50000 1.22500 +vt 1.50000 1.00000 +vt 1.25000 1.67500 +vt 1.25000 1.45000 +vt 1.25000 1.22500 +vt 1.25000 1.00000 +vt 1.00000 1.67500 +vt 1.00000 1.45000 +vt 1.00000 1.22500 +vt 1.00000 1.00000 +vt 0.75000 1.67500 +vt 0.75000 1.45000 +vt 0.75000 1.22500 +vt 0.75000 1.00000 +vt 0.50000 1.67500 +vt 0.50000 1.45000 +vt 0.50000 1.22500 +vt 0.50000 1.00000 +vt 0.25000 1.67500 +vt 0.25000 1.45000 +vt 0.25000 1.22500 +vt 0.25000 1.00000 +vt 0.00000 1.67500 +vt 0.00000 1.45000 +vt 0.00000 1.22500 +vt 0.00000 1.00000 +vt 1.75000 1.67500 +vt 2.00000 1.67500 +vt 1.75000 1.45000 +vt 2.00000 1.45000 +vt 1.75000 1.22500 +vt 2.00000 1.22500 +vt 1.75000 1.00000 +vt 2.00000 1.00000 +vt 1.50000 1.67500 +vt 1.50000 1.45000 +vt 1.50000 1.22500 +vt 1.50000 1.00000 +vt 1.25000 1.67500 +vt 1.25000 1.45000 +vt 1.25000 1.22500 +vt 1.25000 1.00000 +vt 1.00000 1.67500 +vt 1.00000 1.45000 +vt 1.00000 1.22500 +vt 1.00000 1.00000 +vt 0.75000 1.67500 +vt 0.75000 1.45000 +vt 0.75000 1.22500 +vt 0.75000 1.00000 +vt 0.50000 1.67500 +vt 0.50000 1.45000 +vt 0.50000 1.22500 +vt 0.50000 1.00000 +vt 0.25000 1.67500 +vt 0.25000 1.45000 +vt 0.25000 1.22500 +vt 0.25000 1.00000 +vt 0.00000 1.67500 +vt 0.00000 1.45000 +vt 0.00000 1.22500 +vt 0.00000 1.00000 +vt 1.75000 0.85000 +vt 2.00000 0.85000 +vt 1.75000 0.70000 +vt 2.00000 0.70000 +vt 1.75000 0.55000 +vt 2.00000 0.55000 +vt 1.75000 0.40000 +vt 2.00000 0.40000 +vt 1.50000 0.85000 +vt 1.50000 0.70000 +vt 1.50000 0.55000 +vt 1.50000 0.40000 +vt 1.25000 0.85000 +vt 1.25000 0.70000 +vt 1.25000 0.55000 +vt 1.25000 0.40000 +vt 1.00000 0.85000 +vt 1.00000 0.70000 +vt 1.00000 0.55000 +vt 1.00000 0.40000 +vt 0.75000 0.85000 +vt 0.75000 0.70000 +vt 0.75000 0.55000 +vt 0.75000 0.40000 +vt 0.50000 0.85000 +vt 0.50000 0.70000 +vt 0.50000 0.55000 +vt 0.50000 0.40000 +vt 0.25000 0.85000 +vt 0.25000 0.70000 +vt 0.25000 0.55000 +vt 0.25000 0.40000 +vt 0.00000 0.85000 +vt 0.00000 0.70000 +vt 0.00000 0.55000 +vt 0.00000 0.40000 +vt 1.75000 0.85000 +vt 2.00000 0.85000 +vt 1.75000 0.70000 +vt 2.00000 0.70000 +vt 1.75000 0.55000 +vt 2.00000 0.55000 +vt 1.75000 0.40000 +vt 2.00000 0.40000 +vt 1.50000 0.85000 +vt 1.50000 0.70000 +vt 1.50000 0.55000 +vt 1.50000 0.40000 +vt 1.25000 0.85000 +vt 1.25000 0.70000 +vt 1.25000 0.55000 +vt 1.25000 0.40000 +vt 1.00000 0.85000 +vt 1.00000 0.70000 +vt 1.00000 0.55000 +vt 1.00000 0.40000 +vt 0.75000 0.85000 +vt 0.75000 0.70000 +vt 0.75000 0.55000 +vt 0.75000 0.40000 +vt 0.50000 0.85000 +vt 0.50000 0.70000 +vt 0.50000 0.55000 +vt 0.50000 0.40000 +vt 0.25000 0.85000 +vt 0.25000 0.70000 +vt 0.25000 0.55000 +vt 0.25000 0.40000 +vt 0.00000 0.85000 +vt 0.00000 0.70000 +vt 0.00000 0.55000 +vt 0.00000 0.40000 +vt 1.75000 0.30000 +vt 2.00000 0.30000 +vt 1.75000 0.20000 +vt 2.00000 0.20000 +vt 1.75000 0.10000 +vt 2.00000 0.10000 +vt 1.75000 0.00000 +vt 1.50000 0.30000 +vt 1.50000 0.20000 +vt 1.50000 0.10000 +vt 1.50000 0.00000 +vt 1.25000 0.30000 +vt 1.25000 0.20000 +vt 1.25000 0.10000 +vt 1.25000 0.00000 +vt 1.00000 0.30000 +vt 1.00000 0.20000 +vt 1.00000 0.10000 +vt 1.00000 0.00000 +vt 0.75000 0.30000 +vt 0.75000 0.20000 +vt 0.75000 0.10000 +vt 0.75000 0.00000 +vt 0.50000 0.30000 +vt 0.50000 0.20000 +vt 0.50000 0.10000 +vt 0.50000 0.00000 +vt 0.25000 0.30000 +vt 0.25000 0.20000 +vt 0.25000 0.10000 +vt 0.25000 0.00000 +vt 0.00000 0.30000 +vt 0.00000 0.20000 +vt 0.00000 0.10000 +vt 0.00000 0.00000 +vt 1.75000 0.30000 +vt 2.00000 0.30000 +vt 1.75000 0.20000 +vt 2.00000 0.20000 +vt 1.75000 0.10000 +vt 2.00000 0.10000 +vt 1.50000 0.30000 +vt 1.50000 0.20000 +vt 1.50000 0.10000 +vt 1.25000 0.30000 +vt 1.25000 0.20000 +vt 1.25000 0.10000 +vt 1.00000 0.30000 +vt 1.00000 0.20000 +vt 1.00000 0.10000 +vt 0.75000 0.30000 +vt 0.75000 0.20000 +vt 0.75000 0.10000 +vt 0.50000 0.30000 +vt 0.50000 0.20000 +vt 0.50000 0.10000 +vt 0.25000 0.30000 +vt 0.25000 0.20000 +vt 0.25000 0.10000 +vt 0.00000 0.30000 +vt 0.00000 0.20000 +vt 0.00000 0.10000 +vt 0.87500 0.87500 +vt 1.00000 0.87500 +vt 1.00000 1.00000 +vt 0.87500 1.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 0.87500 0.62500 +vt 1.00000 0.62500 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.75000 0.87500 +vt 0.75000 1.00000 +vt 0.75000 0.75000 +vt 0.75000 0.62500 +vt 0.75000 0.50000 +vt 0.62500 0.87500 +vt 0.62500 1.00000 +vt 0.62500 0.75000 +vt 0.62500 0.62500 +vt 0.62500 0.50000 +vt 0.50000 0.87500 +vt 0.50000 1.00000 +vt 0.50000 0.75000 +vt 0.50000 0.62500 +vt 0.50000 0.50000 +vt 0.37500 0.87500 +vt 0.37500 1.00000 +vt 0.37500 0.75000 +vt 0.37500 0.62500 +vt 0.37500 0.50000 +vt 0.25000 0.87500 +vt 0.25000 1.00000 +vt 0.25000 0.75000 +vt 0.25000 0.62500 +vt 0.25000 0.50000 +vt 0.12500 0.87500 +vt 0.12500 1.00000 +vt 0.12500 0.75000 +vt 0.12500 0.62500 +vt 0.12500 0.50000 +vt 0.00000 0.87500 +vt 0.00000 1.00000 +vt 0.00000 0.75000 +vt 0.00000 0.62500 +vt 0.00000 0.50000 +vt 0.87500 0.37500 +vt 1.00000 0.37500 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.12500 +vt 1.00000 0.12500 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.37500 +vt 0.75000 0.25000 +vt 0.75000 0.12500 +vt 0.75000 0.00000 +vt 0.62500 0.37500 +vt 0.62500 0.25000 +vt 0.62500 0.12500 +vt 0.62500 0.00000 +vt 0.50000 0.37500 +vt 0.50000 0.25000 +vt 0.50000 0.12500 +vt 0.50000 0.00000 +vt 0.37500 0.37500 +vt 0.37500 0.25000 +vt 0.37500 0.12500 +vt 0.37500 0.00000 +vt 0.25000 0.37500 +vt 0.25000 0.25000 +vt 0.25000 0.12500 +vt 0.25000 0.00000 +vt 0.12500 0.37500 +vt 0.12500 0.25000 +vt 0.12500 0.12500 +vt 0.12500 0.00000 +vt 0.00000 0.37500 +vt 0.00000 0.25000 +vt 0.00000 0.12500 +vt 0.00000 0.00000 +vt 0.62500 0.22500 +vt 0.50000 0.22500 +vt 0.50000 0.00000 +vt 0.62500 0.00000 +vt 0.62500 0.45000 +vt 0.50000 0.45000 +vt 0.62500 0.67500 +vt 0.50000 0.67500 +vt 0.62500 0.90000 +vt 0.50000 0.90000 +vt 0.75000 0.22500 +vt 0.75000 0.00000 +vt 0.75000 0.45000 +vt 0.75000 0.67500 +vt 0.75000 0.90000 +vt 0.87500 0.22500 +vt 0.87500 0.00000 +vt 0.87500 0.45000 +vt 0.87500 0.67500 +vt 0.87500 0.90000 +vt 1.00000 0.22500 +vt 1.00000 0.00000 +vt 1.00000 0.45000 +vt 1.00000 0.67500 +vt 1.00000 0.90000 +vt 0.12500 0.22500 +vt 0.00000 0.22500 +vt 0.00000 0.00000 +vt 0.12500 0.00000 +vt 0.12500 0.45000 +vt 0.00000 0.45000 +vt 0.12500 0.67500 +vt 0.00000 0.67500 +vt 0.12500 0.90000 +vt 0.00000 0.90000 +vt 0.25000 0.22500 +vt 0.25000 0.00000 +vt 0.25000 0.45000 +vt 0.25000 0.67500 +vt 0.25000 0.90000 +vt 0.37500 0.22500 +vt 0.37500 0.00000 +vt 0.37500 0.45000 +vt 0.37500 0.67500 +vt 0.37500 0.90000 +vt 0.62500 0.92500 +vt 0.50000 0.92500 +vt 0.62500 0.95000 +vt 0.50000 0.95000 +vt 0.62500 0.97500 +vt 0.50000 0.97500 +vt 0.62500 1.00000 +vt 0.50000 1.00000 +vt 0.75000 0.92500 +vt 0.75000 0.95000 +vt 0.75000 0.97500 +vt 0.75000 1.00000 +vt 0.87500 0.92500 +vt 0.87500 0.95000 +vt 0.87500 0.97500 +vt 0.87500 1.00000 +vt 1.00000 0.92500 +vt 1.00000 0.95000 +vt 1.00000 0.97500 +vt 1.00000 1.00000 +vt 0.12500 0.92500 +vt 0.00000 0.92500 +vt 0.12500 0.95000 +vt 0.00000 0.95000 +vt 0.12500 0.97500 +vt 0.00000 0.97500 +vt 0.12500 1.00000 +vt 0.00000 1.00000 +vt 0.25000 0.92500 +vt 0.25000 0.95000 +vt 0.25000 0.97500 +vt 0.25000 1.00000 +vt 0.37500 0.92500 +vt 0.37500 0.95000 +vt 0.37500 0.97500 +vt 0.37500 1.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 1.00000 1.00000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.87500 1.00000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.75000 1.00000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.62500 1.00000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.50000 1.00000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.37500 1.00000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.25000 1.00000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.12500 1.00000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 1.00000 1.00000 +vt 0.87500 1.00000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.75000 1.00000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.62500 1.00000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.50000 1.00000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.37500 1.00000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.25000 1.00000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.12500 1.00000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.00000 1.00000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 1.00000 1.00000 +vt 0.87500 1.00000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.75000 1.00000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.62500 1.00000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.50000 1.00000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.37500 1.00000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.25000 1.00000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.12500 1.00000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.00000 1.00000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt2 1.75000 1.97500 +vt2 2.00000 1.97500 +vt2 2.00000 2.00000 +vt2 1.75000 2.00000 +vt2 1.75000 1.95000 +vt2 2.00000 1.95000 +vt2 1.75000 1.92500 +vt2 2.00000 1.92500 +vt2 1.75000 1.90000 +vt2 2.00000 1.90000 +vt2 1.50000 1.97500 +vt2 1.50000 2.00000 +vt2 1.50000 1.95000 +vt2 1.50000 1.92500 +vt2 1.50000 1.90000 +vt2 1.25000 1.97500 +vt2 1.25000 2.00000 +vt2 1.25000 1.95000 +vt2 1.25000 1.92500 +vt2 1.25000 1.90000 +vt2 1.00000 1.97500 +vt2 1.00000 2.00000 +vt2 1.00000 1.95000 +vt2 1.00000 1.92500 +vt2 1.00000 1.90000 +vt2 0.75000 1.97500 +vt2 0.75000 2.00000 +vt2 0.75000 1.95000 +vt2 0.75000 1.92500 +vt2 0.75000 1.90000 +vt2 0.50000 1.97500 +vt2 0.50000 2.00000 +vt2 0.50000 1.95000 +vt2 0.50000 1.92500 +vt2 0.50000 1.90000 +vt2 0.25000 1.97500 +vt2 0.25000 2.00000 +vt2 0.25000 1.95000 +vt2 0.25000 1.92500 +vt2 0.25000 1.90000 +vt2 0.00000 1.97500 +vt2 0.00000 2.00000 +vt2 0.00000 1.95000 +vt2 0.00000 1.92500 +vt2 0.00000 1.90000 +vt2 1.75000 1.97500 +vt2 2.00000 1.97500 +vt2 2.00000 2.00000 +vt2 1.75000 2.00000 +vt2 1.75000 1.95000 +vt2 2.00000 1.95000 +vt2 1.75000 1.92500 +vt2 2.00000 1.92500 +vt2 1.75000 1.90000 +vt2 2.00000 1.90000 +vt2 1.50000 1.97500 +vt2 1.50000 2.00000 +vt2 1.50000 1.95000 +vt2 1.50000 1.92500 +vt2 1.50000 1.90000 +vt2 1.25000 1.97500 +vt2 1.25000 2.00000 +vt2 1.25000 1.95000 +vt2 1.25000 1.92500 +vt2 1.25000 1.90000 +vt2 1.00000 1.97500 +vt2 1.00000 2.00000 +vt2 1.00000 1.95000 +vt2 1.00000 1.92500 +vt2 1.00000 1.90000 +vt2 0.75000 1.97500 +vt2 0.75000 2.00000 +vt2 0.75000 1.95000 +vt2 0.75000 1.92500 +vt2 0.75000 1.90000 +vt2 0.50000 1.97500 +vt2 0.50000 2.00000 +vt2 0.50000 1.95000 +vt2 0.50000 1.92500 +vt2 0.50000 1.90000 +vt2 0.25000 1.97500 +vt2 0.25000 2.00000 +vt2 0.25000 1.95000 +vt2 0.25000 1.92500 +vt2 0.25000 1.90000 +vt2 0.00000 1.97500 +vt2 0.00000 2.00000 +vt2 0.00000 1.95000 +vt2 0.00000 1.92500 +vt2 0.00000 1.90000 +vt2 1.75000 1.67500 +vt2 2.00000 1.67500 +vt2 1.75000 1.45000 +vt2 2.00000 1.45000 +vt2 1.75000 1.22500 +vt2 2.00000 1.22500 +vt2 1.75000 1.00000 +vt2 2.00000 1.00000 +vt2 1.50000 1.67500 +vt2 1.50000 1.45000 +vt2 1.50000 1.22500 +vt2 1.50000 1.00000 +vt2 1.25000 1.67500 +vt2 1.25000 1.45000 +vt2 1.25000 1.22500 +vt2 1.25000 1.00000 +vt2 1.00000 1.67500 +vt2 1.00000 1.45000 +vt2 1.00000 1.22500 +vt2 1.00000 1.00000 +vt2 0.75000 1.67500 +vt2 0.75000 1.45000 +vt2 0.75000 1.22500 +vt2 0.75000 1.00000 +vt2 0.50000 1.67500 +vt2 0.50000 1.45000 +vt2 0.50000 1.22500 +vt2 0.50000 1.00000 +vt2 0.25000 1.67500 +vt2 0.25000 1.45000 +vt2 0.25000 1.22500 +vt2 0.25000 1.00000 +vt2 0.00000 1.67500 +vt2 0.00000 1.45000 +vt2 0.00000 1.22500 +vt2 0.00000 1.00000 +vt2 1.75000 1.67500 +vt2 2.00000 1.67500 +vt2 1.75000 1.45000 +vt2 2.00000 1.45000 +vt2 1.75000 1.22500 +vt2 2.00000 1.22500 +vt2 1.75000 1.00000 +vt2 2.00000 1.00000 +vt2 1.50000 1.67500 +vt2 1.50000 1.45000 +vt2 1.50000 1.22500 +vt2 1.50000 1.00000 +vt2 1.25000 1.67500 +vt2 1.25000 1.45000 +vt2 1.25000 1.22500 +vt2 1.25000 1.00000 +vt2 1.00000 1.67500 +vt2 1.00000 1.45000 +vt2 1.00000 1.22500 +vt2 1.00000 1.00000 +vt2 0.75000 1.67500 +vt2 0.75000 1.45000 +vt2 0.75000 1.22500 +vt2 0.75000 1.00000 +vt2 0.50000 1.67500 +vt2 0.50000 1.45000 +vt2 0.50000 1.22500 +vt2 0.50000 1.00000 +vt2 0.25000 1.67500 +vt2 0.25000 1.45000 +vt2 0.25000 1.22500 +vt2 0.25000 1.00000 +vt2 0.00000 1.67500 +vt2 0.00000 1.45000 +vt2 0.00000 1.22500 +vt2 0.00000 1.00000 +vt2 1.75000 0.85000 +vt2 2.00000 0.85000 +vt2 1.75000 0.70000 +vt2 2.00000 0.70000 +vt2 1.75000 0.55000 +vt2 2.00000 0.55000 +vt2 1.75000 0.40000 +vt2 2.00000 0.40000 +vt2 1.50000 0.85000 +vt2 1.50000 0.70000 +vt2 1.50000 0.55000 +vt2 1.50000 0.40000 +vt2 1.25000 0.85000 +vt2 1.25000 0.70000 +vt2 1.25000 0.55000 +vt2 1.25000 0.40000 +vt2 1.00000 0.85000 +vt2 1.00000 0.70000 +vt2 1.00000 0.55000 +vt2 1.00000 0.40000 +vt2 0.75000 0.85000 +vt2 0.75000 0.70000 +vt2 0.75000 0.55000 +vt2 0.75000 0.40000 +vt2 0.50000 0.85000 +vt2 0.50000 0.70000 +vt2 0.50000 0.55000 +vt2 0.50000 0.40000 +vt2 0.25000 0.85000 +vt2 0.25000 0.70000 +vt2 0.25000 0.55000 +vt2 0.25000 0.40000 +vt2 0.00000 0.85000 +vt2 0.00000 0.70000 +vt2 0.00000 0.55000 +vt2 0.00000 0.40000 +vt2 1.75000 0.85000 +vt2 2.00000 0.85000 +vt2 1.75000 0.70000 +vt2 2.00000 0.70000 +vt2 1.75000 0.55000 +vt2 2.00000 0.55000 +vt2 1.75000 0.40000 +vt2 2.00000 0.40000 +vt2 1.50000 0.85000 +vt2 1.50000 0.70000 +vt2 1.50000 0.55000 +vt2 1.50000 0.40000 +vt2 1.25000 0.85000 +vt2 1.25000 0.70000 +vt2 1.25000 0.55000 +vt2 1.25000 0.40000 +vt2 1.00000 0.85000 +vt2 1.00000 0.70000 +vt2 1.00000 0.55000 +vt2 1.00000 0.40000 +vt2 0.75000 0.85000 +vt2 0.75000 0.70000 +vt2 0.75000 0.55000 +vt2 0.75000 0.40000 +vt2 0.50000 0.85000 +vt2 0.50000 0.70000 +vt2 0.50000 0.55000 +vt2 0.50000 0.40000 +vt2 0.25000 0.85000 +vt2 0.25000 0.70000 +vt2 0.25000 0.55000 +vt2 0.25000 0.40000 +vt2 0.00000 0.85000 +vt2 0.00000 0.70000 +vt2 0.00000 0.55000 +vt2 0.00000 0.40000 +vt2 1.75000 0.30000 +vt2 2.00000 0.30000 +vt2 1.75000 0.20000 +vt2 2.00000 0.20000 +vt2 1.75000 0.10000 +vt2 2.00000 0.10000 +vt2 1.75000 0.00000 +vt2 1.50000 0.30000 +vt2 1.50000 0.20000 +vt2 1.50000 0.10000 +vt2 1.50000 0.00000 +vt2 1.25000 0.30000 +vt2 1.25000 0.20000 +vt2 1.25000 0.10000 +vt2 1.25000 0.00000 +vt2 1.00000 0.30000 +vt2 1.00000 0.20000 +vt2 1.00000 0.10000 +vt2 1.00000 0.00000 +vt2 0.75000 0.30000 +vt2 0.75000 0.20000 +vt2 0.75000 0.10000 +vt2 0.75000 0.00000 +vt2 0.50000 0.30000 +vt2 0.50000 0.20000 +vt2 0.50000 0.10000 +vt2 0.50000 0.00000 +vt2 0.25000 0.30000 +vt2 0.25000 0.20000 +vt2 0.25000 0.10000 +vt2 0.25000 0.00000 +vt2 0.00000 0.30000 +vt2 0.00000 0.20000 +vt2 0.00000 0.10000 +vt2 0.00000 0.00000 +vt2 1.75000 0.30000 +vt2 2.00000 0.30000 +vt2 1.75000 0.20000 +vt2 2.00000 0.20000 +vt2 1.75000 0.10000 +vt2 2.00000 0.10000 +vt2 1.50000 0.30000 +vt2 1.50000 0.20000 +vt2 1.50000 0.10000 +vt2 1.25000 0.30000 +vt2 1.25000 0.20000 +vt2 1.25000 0.10000 +vt2 1.00000 0.30000 +vt2 1.00000 0.20000 +vt2 1.00000 0.10000 +vt2 0.75000 0.30000 +vt2 0.75000 0.20000 +vt2 0.75000 0.10000 +vt2 0.50000 0.30000 +vt2 0.50000 0.20000 +vt2 0.50000 0.10000 +vt2 0.25000 0.30000 +vt2 0.25000 0.20000 +vt2 0.25000 0.10000 +vt2 0.00000 0.30000 +vt2 0.00000 0.20000 +vt2 0.00000 0.10000 +vt2 0.87500 0.87500 +vt2 1.00000 0.87500 +vt2 1.00000 1.00000 +vt2 0.87500 1.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 0.87500 0.62500 +vt2 1.00000 0.62500 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.75000 0.87500 +vt2 0.75000 1.00000 +vt2 0.75000 0.75000 +vt2 0.75000 0.62500 +vt2 0.75000 0.50000 +vt2 0.62500 0.87500 +vt2 0.62500 1.00000 +vt2 0.62500 0.75000 +vt2 0.62500 0.62500 +vt2 0.62500 0.50000 +vt2 0.50000 0.87500 +vt2 0.50000 1.00000 +vt2 0.50000 0.75000 +vt2 0.50000 0.62500 +vt2 0.50000 0.50000 +vt2 0.37500 0.87500 +vt2 0.37500 1.00000 +vt2 0.37500 0.75000 +vt2 0.37500 0.62500 +vt2 0.37500 0.50000 +vt2 0.25000 0.87500 +vt2 0.25000 1.00000 +vt2 0.25000 0.75000 +vt2 0.25000 0.62500 +vt2 0.25000 0.50000 +vt2 0.12500 0.87500 +vt2 0.12500 1.00000 +vt2 0.12500 0.75000 +vt2 0.12500 0.62500 +vt2 0.12500 0.50000 +vt2 0.00000 0.87500 +vt2 0.00000 1.00000 +vt2 0.00000 0.75000 +vt2 0.00000 0.62500 +vt2 0.00000 0.50000 +vt2 0.87500 0.37500 +vt2 1.00000 0.37500 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.12500 +vt2 1.00000 0.12500 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.37500 +vt2 0.75000 0.25000 +vt2 0.75000 0.12500 +vt2 0.75000 0.00000 +vt2 0.62500 0.37500 +vt2 0.62500 0.25000 +vt2 0.62500 0.12500 +vt2 0.62500 0.00000 +vt2 0.50000 0.37500 +vt2 0.50000 0.25000 +vt2 0.50000 0.12500 +vt2 0.50000 0.00000 +vt2 0.37500 0.37500 +vt2 0.37500 0.25000 +vt2 0.37500 0.12500 +vt2 0.37500 0.00000 +vt2 0.25000 0.37500 +vt2 0.25000 0.25000 +vt2 0.25000 0.12500 +vt2 0.25000 0.00000 +vt2 0.12500 0.37500 +vt2 0.12500 0.25000 +vt2 0.12500 0.12500 +vt2 0.12500 0.00000 +vt2 0.00000 0.37500 +vt2 0.00000 0.25000 +vt2 0.00000 0.12500 +vt2 0.00000 0.00000 +vt2 0.62500 0.22500 +vt2 0.50000 0.22500 +vt2 0.50000 0.00000 +vt2 0.62500 0.00000 +vt2 0.62500 0.45000 +vt2 0.50000 0.45000 +vt2 0.62500 0.67500 +vt2 0.50000 0.67500 +vt2 0.62500 0.90000 +vt2 0.50000 0.90000 +vt2 0.75000 0.22500 +vt2 0.75000 0.00000 +vt2 0.75000 0.45000 +vt2 0.75000 0.67500 +vt2 0.75000 0.90000 +vt2 0.87500 0.22500 +vt2 0.87500 0.00000 +vt2 0.87500 0.45000 +vt2 0.87500 0.67500 +vt2 0.87500 0.90000 +vt2 1.00000 0.22500 +vt2 1.00000 0.00000 +vt2 1.00000 0.45000 +vt2 1.00000 0.67500 +vt2 1.00000 0.90000 +vt2 0.12500 0.22500 +vt2 0.00000 0.22500 +vt2 0.00000 0.00000 +vt2 0.12500 0.00000 +vt2 0.12500 0.45000 +vt2 0.00000 0.45000 +vt2 0.12500 0.67500 +vt2 0.00000 0.67500 +vt2 0.12500 0.90000 +vt2 0.00000 0.90000 +vt2 0.25000 0.22500 +vt2 0.25000 0.00000 +vt2 0.25000 0.45000 +vt2 0.25000 0.67500 +vt2 0.25000 0.90000 +vt2 0.37500 0.22500 +vt2 0.37500 0.00000 +vt2 0.37500 0.45000 +vt2 0.37500 0.67500 +vt2 0.37500 0.90000 +vt2 0.62500 0.92500 +vt2 0.50000 0.92500 +vt2 0.62500 0.95000 +vt2 0.50000 0.95000 +vt2 0.62500 0.97500 +vt2 0.50000 0.97500 +vt2 0.62500 1.00000 +vt2 0.50000 1.00000 +vt2 0.75000 0.92500 +vt2 0.75000 0.95000 +vt2 0.75000 0.97500 +vt2 0.75000 1.00000 +vt2 0.87500 0.92500 +vt2 0.87500 0.95000 +vt2 0.87500 0.97500 +vt2 0.87500 1.00000 +vt2 1.00000 0.92500 +vt2 1.00000 0.95000 +vt2 1.00000 0.97500 +vt2 1.00000 1.00000 +vt2 0.12500 0.92500 +vt2 0.00000 0.92500 +vt2 0.12500 0.95000 +vt2 0.00000 0.95000 +vt2 0.12500 0.97500 +vt2 0.00000 0.97500 +vt2 0.12500 1.00000 +vt2 0.00000 1.00000 +vt2 0.25000 0.92500 +vt2 0.25000 0.95000 +vt2 0.25000 0.97500 +vt2 0.25000 1.00000 +vt2 0.37500 0.92500 +vt2 0.37500 0.95000 +vt2 0.37500 0.97500 +vt2 0.37500 1.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 1.00000 1.00000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.87500 1.00000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.75000 1.00000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.62500 1.00000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.50000 1.00000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.37500 1.00000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.25000 1.00000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.12500 1.00000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 1.00000 1.00000 +vt2 0.87500 1.00000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.75000 1.00000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.62500 1.00000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.50000 1.00000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.37500 1.00000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.25000 1.00000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.12500 1.00000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.00000 1.00000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 1.00000 1.00000 +vt2 0.87500 1.00000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.75000 1.00000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.62500 1.00000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.50000 1.00000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.37500 1.00000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.25000 1.00000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.12500 1.00000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.00000 1.00000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vn -0.89340000 0.36910000 0.25600000 +vn -0.96680000 0.00000000 0.25540000 +vn -0.96670000 0.00000000 -0.25580000 +vn -0.89300000 0.36990000 -0.25630000 +vn -0.08390000 0.03550000 0.99580000 +vn -0.09210000 0.00000000 0.99580000 +vn 0.62970000 -0.26040000 0.73190000 +vn 0.68200000 0.00000000 0.73130000 +vn 0.80370000 -0.33260000 0.49340000 +vn 0.87030000 0.00000000 0.49250000 +vn -0.68350000 0.68350000 0.25610000 +vn -0.68340000 0.68340000 -0.25670000 +vn -0.06490000 0.06490000 0.99580000 +vn 0.48140000 -0.48140000 0.73250000 +vn 0.61480000 -0.61480000 0.49400000 +vn -0.36910000 0.89340000 0.25600000 +vn -0.36990000 0.89300000 -0.25630000 +vn -0.03550000 0.08390000 0.99580000 +vn 0.26040000 -0.62970000 0.73190000 +vn 0.33260000 -0.80370000 0.49340000 +vn -0.00190000 0.96700000 0.25470000 +vn -0.00280000 0.96620000 -0.25790000 +vn -0.00030000 0.09230000 0.99570000 +vn 0.00000000 -0.68210000 0.73130000 +vn 0.00000000 -0.87030000 0.49250000 +vn 0.37710000 0.91410000 0.14910000 +vn 0.37910000 0.85280000 -0.35930000 +vn 0.02750000 0.12260000 0.99210000 +vn -0.26100000 -0.63540000 0.72680000 +vn -0.33250000 -0.80430000 0.49250000 +vn 0.71270000 0.69760000 0.07370000 +vn 0.66350000 0.62530000 -0.41080000 +vn 0.09970000 0.12200000 0.98750000 +vn -0.48730000 -0.48860000 0.72380000 +vn -0.61520000 -0.61550000 0.49260000 +vn 0.91730000 0.36150000 0.16710000 +vn 0.88000000 0.33870000 -0.33290000 +vn 0.11360000 0.04810000 0.99240000 +vn -0.63410000 -0.26190000 0.72750000 +vn -0.80410000 -0.33270000 0.49260000 +vn 0.96740000 -0.00810000 0.25300000 +vn 0.96670000 -0.01050000 -0.25570000 +vn 0.09340000 -0.00130000 0.99560000 +vn -0.68220000 0.00030000 0.73120000 +vn -0.87030000 0.00010000 0.49250000 +vn 0.89340000 -0.36910000 0.25600000 +vn 0.96740000 -0.00810000 0.25300000 +vn 0.96670000 -0.01050000 -0.25570000 +vn 0.89300000 -0.36990000 -0.25630000 +vn 0.08390000 -0.03550000 0.99580000 +vn 0.09340000 -0.00130000 0.99560000 +vn -0.62970000 0.26040000 0.73190000 +vn -0.68220000 0.00030000 0.73120000 +vn -0.80370000 0.33260000 0.49340000 +vn -0.87030000 0.00010000 0.49250000 +vn 0.68350000 -0.68350000 0.25610000 +vn 0.68340000 -0.68340000 -0.25670000 +vn 0.06490000 -0.06490000 0.99580000 +vn -0.48140000 0.48140000 0.73250000 +vn -0.61480000 0.61480000 0.49400000 +vn 0.36910000 -0.89340000 0.25600000 +vn 0.36990000 -0.89300000 -0.25630000 +vn 0.03550000 -0.08390000 0.99580000 +vn -0.26040000 0.62970000 0.73190000 +vn -0.33260000 0.80370000 0.49340000 +vn 0.00000000 -0.96680000 0.25540000 +vn 0.00000000 -0.96670000 -0.25580000 +vn 0.00000000 -0.09210000 0.99580000 +vn 0.00000000 0.68200000 0.73130000 +vn 0.00000000 0.87030000 0.49250000 +vn -0.36910000 -0.89340000 0.25600000 +vn -0.36990000 -0.89300000 -0.25630000 +vn -0.03550000 -0.08390000 0.99580000 +vn 0.26040000 0.62970000 0.73190000 +vn 0.33260000 0.80370000 0.49340000 +vn -0.68350000 -0.68350000 0.25610000 +vn -0.68340000 -0.68340000 -0.25670000 +vn -0.06490000 -0.06490000 0.99580000 +vn 0.48140000 0.48140000 0.73250000 +vn 0.61480000 0.61480000 0.49400000 +vn -0.89340000 -0.36910000 0.25600000 +vn -0.89300000 -0.36990000 -0.25630000 +vn -0.08390000 -0.03550000 0.99580000 +vn 0.62970000 0.26040000 0.73190000 +vn 0.80370000 0.33260000 0.49340000 +vn -0.96680000 0.00000000 0.25540000 +vn -0.96670000 0.00000000 -0.25580000 +vn -0.09210000 0.00000000 0.99580000 +vn 0.68200000 0.00000000 0.73130000 +vn 0.87030000 0.00000000 0.49250000 +vn 0.84540000 -0.34980000 0.40350000 +vn 0.91530000 0.00000000 0.40270000 +vn 0.87000000 -0.36000000 0.33690000 +vn 0.94180000 0.00000000 0.33620000 +vn 0.90420000 -0.37430000 0.20580000 +vn 0.97870000 0.00000000 0.20530000 +vn 0.92190000 -0.38180000 -0.06640000 +vn 0.99780000 0.00000000 -0.06620000 +vn 0.64680000 -0.64680000 0.40410000 +vn 0.66570000 -0.66570000 0.33740000 +vn 0.69190000 -0.69190000 0.20610000 +vn 0.70550000 -0.70550000 -0.06650000 +vn 0.34980000 -0.84540000 0.40350000 +vn 0.36000000 -0.87000000 0.33690000 +vn 0.37430000 -0.90420000 0.20580000 +vn 0.38180000 -0.92190000 -0.06640000 +vn 0.00000000 -0.91530000 0.40270000 +vn 0.00000000 -0.94180000 0.33620000 +vn 0.00000000 -0.97870000 0.20530000 +vn 0.00000000 -0.99780000 -0.06620000 +vn -0.34980000 -0.84540000 0.40350000 +vn -0.36000000 -0.87000000 0.33690000 +vn -0.37430000 -0.90420000 0.20580000 +vn -0.38180000 -0.92190000 -0.06640000 +vn -0.64680000 -0.64680000 0.40410000 +vn -0.66570000 -0.66570000 0.33740000 +vn -0.69190000 -0.69190000 0.20610000 +vn -0.70550000 -0.70550000 -0.06650000 +vn -0.84540000 -0.34980000 0.40350000 +vn -0.87000000 -0.36000000 0.33690000 +vn -0.90420000 -0.37430000 0.20580000 +vn -0.92190000 -0.38180000 -0.06640000 +vn -0.91530000 0.00000000 0.40270000 +vn -0.94180000 0.00000000 0.33620000 +vn -0.97870000 0.00000000 0.20530000 +vn -0.99780000 0.00000000 -0.06620000 +vn -0.84540000 0.34980000 0.40350000 +vn -0.91530000 0.00000000 0.40270000 +vn -0.87000000 0.36000000 0.33690000 +vn -0.94180000 0.00000000 0.33620000 +vn -0.90420000 0.37430000 0.20580000 +vn -0.97870000 0.00000000 0.20530000 +vn -0.92190000 0.38180000 -0.06640000 +vn -0.99780000 0.00000000 -0.06620000 +vn -0.64680000 0.64680000 0.40410000 +vn -0.66570000 0.66570000 0.33740000 +vn -0.69190000 0.69190000 0.20610000 +vn -0.70550000 0.70550000 -0.06650000 +vn -0.34980000 0.84540000 0.40350000 +vn -0.36000000 0.87000000 0.33690000 +vn -0.37430000 0.90420000 0.20580000 +vn -0.38180000 0.92190000 -0.06640000 +vn 0.00000000 0.91530000 0.40270000 +vn 0.00000000 0.94180000 0.33620000 +vn 0.00000000 0.97870000 0.20530000 +vn 0.00000000 0.99780000 -0.06620000 +vn 0.34980000 0.84540000 0.40350000 +vn 0.36000000 0.87000000 0.33690000 +vn 0.37430000 0.90420000 0.20580000 +vn 0.38180000 0.92190000 -0.06640000 +vn 0.64680000 0.64680000 0.40410000 +vn 0.66570000 0.66570000 0.33740000 +vn 0.69190000 0.69190000 0.20610000 +vn 0.70550000 0.70550000 -0.06650000 +vn 0.84540000 0.34980000 0.40350000 +vn 0.87000000 0.36000000 0.33690000 +vn 0.90420000 0.37430000 0.20580000 +vn 0.92190000 0.38180000 -0.06640000 +vn 0.91530000 0.00000000 0.40270000 +vn 0.94180000 0.00000000 0.33620000 +vn 0.97870000 0.00000000 0.20530000 +vn 0.99780000 0.00000000 -0.06620000 +vn 0.83140000 -0.34420000 -0.43620000 +vn 0.90020000 0.00000000 -0.43550000 +vn 0.67350000 -0.27860000 -0.68470000 +vn 0.72960000 0.00000000 -0.68390000 +vn 0.64040000 -0.26490000 -0.72090000 +vn 0.69400000 0.00000000 -0.72000000 +vn 0.73290000 -0.30320000 -0.60900000 +vn 0.79390000 0.00000000 -0.60800000 +vn 0.63610000 -0.63610000 -0.43680000 +vn 0.51500000 -0.51500000 -0.68530000 +vn 0.48970000 -0.48970000 -0.72140000 +vn 0.56060000 -0.56060000 -0.60960000 +vn 0.34420000 -0.83140000 -0.43620000 +vn 0.27860000 -0.67350000 -0.68470000 +vn 0.26490000 -0.64040000 -0.72090000 +vn 0.30320000 -0.73290000 -0.60900000 +vn 0.00000000 -0.90020000 -0.43550000 +vn 0.00000000 -0.72960000 -0.68390000 +vn 0.00000000 -0.69400000 -0.72000000 +vn 0.00000000 -0.79390000 -0.60800000 +vn -0.34420000 -0.83140000 -0.43620000 +vn -0.27860000 -0.67350000 -0.68470000 +vn -0.26490000 -0.64040000 -0.72090000 +vn -0.30320000 -0.73290000 -0.60900000 +vn -0.63610000 -0.63610000 -0.43680000 +vn -0.51500000 -0.51500000 -0.68530000 +vn -0.48970000 -0.48970000 -0.72140000 +vn -0.56060000 -0.56060000 -0.60960000 +vn -0.83140000 -0.34420000 -0.43620000 +vn -0.67350000 -0.27860000 -0.68470000 +vn -0.64040000 -0.26490000 -0.72090000 +vn -0.73290000 -0.30320000 -0.60900000 +vn -0.90020000 0.00000000 -0.43550000 +vn -0.72960000 0.00000000 -0.68390000 +vn -0.69400000 0.00000000 -0.72000000 +vn -0.79390000 0.00000000 -0.60800000 +vn -0.83140000 0.34420000 -0.43620000 +vn -0.90020000 0.00000000 -0.43550000 +vn -0.67350000 0.27860000 -0.68470000 +vn -0.72960000 0.00000000 -0.68390000 +vn -0.64040000 0.26490000 -0.72090000 +vn -0.69400000 0.00000000 -0.72000000 +vn -0.73290000 0.30320000 -0.60900000 +vn -0.79390000 0.00000000 -0.60800000 +vn -0.63610000 0.63610000 -0.43680000 +vn -0.51500000 0.51500000 -0.68530000 +vn -0.48970000 0.48970000 -0.72140000 +vn -0.56060000 0.56060000 -0.60960000 +vn -0.34420000 0.83140000 -0.43620000 +vn -0.27860000 0.67350000 -0.68470000 +vn -0.26490000 0.64040000 -0.72090000 +vn -0.30320000 0.73290000 -0.60900000 +vn 0.00000000 0.90020000 -0.43550000 +vn 0.00000000 0.72960000 -0.68390000 +vn 0.00000000 0.69400000 -0.72000000 +vn 0.00000000 0.79390000 -0.60800000 +vn 0.34420000 0.83140000 -0.43620000 +vn 0.27860000 0.67350000 -0.68470000 +vn 0.26490000 0.64040000 -0.72090000 +vn 0.30320000 0.73290000 -0.60900000 +vn 0.63610000 0.63610000 -0.43680000 +vn 0.51500000 0.51500000 -0.68530000 +vn 0.48970000 0.48970000 -0.72140000 +vn 0.56060000 0.56060000 -0.60960000 +vn 0.83140000 0.34420000 -0.43620000 +vn 0.67350000 0.27860000 -0.68470000 +vn 0.64040000 0.26490000 -0.72090000 +vn 0.73290000 0.30320000 -0.60900000 +vn 0.90020000 0.00000000 -0.43550000 +vn 0.72960000 0.00000000 -0.68390000 +vn 0.69400000 0.00000000 -0.72000000 +vn 0.79390000 0.00000000 -0.60800000 +vn 0.57620000 -0.23820000 -0.78180000 +vn 0.62390000 0.00000000 -0.78150000 +vn 0.16360000 -0.06750000 -0.98420000 +vn 0.17730000 0.00000000 -0.98420000 +vn 0.04540000 -0.01870000 -0.99880000 +vn 0.04920000 0.00000000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn 0.44040000 -0.44040000 -0.78230000 +vn 0.12490000 -0.12490000 -0.98430000 +vn 0.03470000 -0.03470000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn 0.23820000 -0.57620000 -0.78180000 +vn 0.06750000 -0.16360000 -0.98420000 +vn 0.01870000 -0.04540000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn 0.00000000 -0.62390000 -0.78150000 +vn 0.00000000 -0.17730000 -0.98420000 +vn 0.00000000 -0.04920000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.23820000 -0.57620000 -0.78180000 +vn -0.06750000 -0.16360000 -0.98420000 +vn -0.01870000 -0.04540000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.44040000 -0.44040000 -0.78230000 +vn -0.12490000 -0.12490000 -0.98430000 +vn -0.03470000 -0.03470000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.57620000 -0.23820000 -0.78180000 +vn -0.16360000 -0.06750000 -0.98420000 +vn -0.04540000 -0.01870000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.62390000 0.00000000 -0.78150000 +vn -0.17730000 0.00000000 -0.98420000 +vn -0.04920000 0.00000000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.57620000 0.23820000 -0.78180000 +vn -0.62390000 0.00000000 -0.78150000 +vn -0.16360000 0.06750000 -0.98420000 +vn -0.17730000 0.00000000 -0.98420000 +vn -0.04540000 0.01870000 -0.99880000 +vn -0.04920000 0.00000000 -0.99880000 +vn -0.44040000 0.44040000 -0.78230000 +vn -0.12490000 0.12490000 -0.98430000 +vn -0.03470000 0.03470000 -0.99880000 +vn -0.23820000 0.57620000 -0.78180000 +vn -0.06750000 0.16360000 -0.98420000 +vn -0.01870000 0.04540000 -0.99880000 +vn 0.00000000 0.62390000 -0.78150000 +vn 0.00000000 0.17730000 -0.98420000 +vn 0.00000000 0.04920000 -0.99880000 +vn 0.23820000 0.57620000 -0.78180000 +vn 0.06750000 0.16360000 -0.98420000 +vn 0.01870000 0.04540000 -0.99880000 +vn 0.44040000 0.44040000 -0.78230000 +vn 0.12490000 0.12490000 -0.98430000 +vn 0.03470000 0.03470000 -0.99880000 +vn 0.57620000 0.23820000 -0.78180000 +vn 0.16360000 0.06750000 -0.98420000 +vn 0.04540000 0.01870000 -0.99880000 +vn 0.62390000 0.00000000 -0.78150000 +vn 0.17730000 0.00000000 -0.98420000 +vn 0.04920000 0.00000000 -0.99880000 +vn 0.03610000 -0.54560000 -0.83730000 +vn 0.03910000 0.00100000 -0.99920000 +vn 0.00780000 0.00020000 -1.00000000 +vn 0.00700000 -0.58290000 -0.81250000 +vn 0.16180000 -0.56300000 -0.81040000 +vn 0.17950000 0.00440000 -0.98370000 +vn 0.48240000 -0.64270000 -0.59510000 +vn 0.61230000 0.01050000 -0.79060000 +vn 0.73870000 -0.66420000 -0.11460000 +vn 0.98620000 0.00670000 -0.16570000 +vn 0.00280000 -0.99980000 0.01710000 +vn -0.00190000 -0.98680000 0.16210000 +vn 0.01050000 -0.99720000 0.07340000 +vn -0.06600000 -0.98930000 0.13010000 +vn -0.09440000 -0.99540000 0.01660000 +vn -0.04860000 -0.53950000 0.84060000 +vn -0.00920000 -0.49030000 0.87150000 +vn -0.22330000 -0.55270000 0.80290000 +vn -0.59640000 -0.57510000 0.56000000 +vn -0.80330000 -0.59160000 0.06820000 +vn -0.05880000 -0.00070000 0.99830000 +vn -0.01060000 -0.00010000 0.99990000 +vn -0.28070000 -0.00330000 0.95980000 +vn -0.74970000 -0.00430000 0.66170000 +vn -0.99740000 -0.00210000 0.07270000 +vn -0.04650000 0.53880000 0.84120000 +vn -0.00880000 0.49030000 0.87150000 +vn -0.21790000 0.54920000 0.80680000 +vn -0.59730000 0.57410000 0.56000000 +vn -0.80400000 0.59130000 0.06290000 +vn 0.00200000 0.99990000 0.01460000 +vn -0.00180000 0.98680000 0.16170000 +vn 0.00920000 0.99820000 0.06010000 +vn -0.05930000 0.99170000 0.11390000 +vn -0.08690000 0.99610000 0.01230000 +vn 0.03380000 0.54540000 -0.83750000 +vn 0.00640000 0.58310000 -0.81240000 +vn 0.15710000 0.56220000 -0.81190000 +vn 0.48440000 0.64650000 -0.58940000 +vn 0.73890000 0.66620000 -0.10130000 +vn 0.03910000 0.00100000 -0.99920000 +vn 0.00780000 0.00020000 -1.00000000 +vn 0.17950000 0.00440000 -0.98370000 +vn 0.61230000 0.01050000 -0.79060000 +vn 0.98620000 0.00670000 -0.16570000 +vn 0.72560000 -0.63740000 0.25940000 +vn 0.94650000 0.00340000 0.32270000 +vn 0.64590000 -0.60770000 0.46200000 +vn 0.82580000 0.00750000 0.56390000 +vn 0.53160000 -0.55860000 0.63670000 +vn 0.65000000 0.00690000 0.75990000 +vn 0.42500000 -0.59550000 0.68170000 +vn 0.53240000 0.00520000 0.84650000 +vn -0.04960000 -0.99860000 -0.01980000 +vn -0.03780000 -0.99860000 -0.03560000 +vn -0.03790000 -0.99860000 -0.03650000 +vn -0.16890000 -0.93950000 -0.29790000 +vn -0.74230000 -0.59950000 -0.29920000 +vn -0.61960000 -0.57950000 -0.52940000 +vn -0.48370000 -0.54380000 -0.68580000 +vn -0.44530000 -0.41320000 -0.79440000 +vn -0.92650000 -0.00200000 -0.37630000 +vn -0.75390000 -0.00430000 -0.65700000 +vn -0.56620000 -0.00350000 -0.82420000 +vn -0.48180000 -0.00190000 -0.87630000 +vn -0.74470000 0.59900000 -0.29440000 +vn -0.62190000 0.57820000 -0.52810000 +vn -0.48120000 0.54280000 -0.68830000 +vn -0.43810000 0.41570000 -0.79700000 +vn -0.04430000 0.99890000 -0.01710000 +vn -0.02620000 0.99930000 -0.02820000 +vn -0.02530000 0.99930000 -0.02830000 +vn -0.15750000 0.94420000 -0.28940000 +vn 0.72820000 0.63710000 0.25240000 +vn 0.64710000 0.60830000 0.45970000 +vn 0.52300000 0.56220000 0.64070000 +vn 0.41000000 0.60470000 0.68290000 +vn 0.94650000 0.00340000 0.32270000 +vn 0.82580000 0.00750000 0.56390000 +vn 0.65000000 0.00690000 0.75990000 +vn 0.53240000 0.00520000 0.84650000 +vn -0.31670000 -0.70210000 0.63780000 +vn -0.54890000 0.00150000 0.83590000 +vn -0.23080000 0.00650000 0.97300000 +vn -0.15290000 -0.71020000 0.68720000 +vn -0.60110000 -0.64530000 0.47150000 +vn -0.87570000 -0.00990000 0.48280000 +vn -0.63590000 -0.62980000 0.44610000 +vn -0.87760000 -0.01910000 0.47910000 +vn -0.43570000 -0.67000000 0.60100000 +vn -0.69620000 -0.02450000 0.71740000 +vn 0.22330000 -0.97470000 0.00650000 +vn 0.11110000 -0.99020000 -0.08510000 +vn 0.19010000 -0.96950000 0.15500000 +vn 0.00530000 -0.98190000 0.18950000 +vn -0.01180000 -0.96900000 0.24670000 +vn 0.57250000 -0.59160000 -0.56770000 +vn 0.34390000 -0.59940000 -0.72280000 +vn 0.78740000 -0.56050000 -0.25650000 +vn 0.64710000 -0.69810000 -0.30640000 +vn 0.42750000 -0.75360000 -0.49930000 +vn 0.67150000 0.00090000 -0.74100000 +vn 0.41090000 -0.00130000 -0.91170000 +vn 0.92200000 0.00730000 -0.38710000 +vn 0.84690000 0.01390000 -0.53160000 +vn 0.53590000 0.01050000 -0.84420000 +vn 0.57870000 0.59180000 -0.56110000 +vn 0.67150000 0.00090000 -0.74100000 +vn 0.41090000 -0.00130000 -0.91170000 +vn 0.34120000 0.60090000 -0.72280000 +vn 0.78490000 0.56650000 -0.25100000 +vn 0.92200000 0.00730000 -0.38710000 +vn 0.64270000 0.70400000 -0.30230000 +vn 0.84690000 0.01390000 -0.53160000 +vn 0.41860000 0.75810000 -0.50000000 +vn 0.53590000 0.01050000 -0.84420000 +vn 0.23280000 0.97240000 0.01260000 +vn 0.11580000 0.99010000 -0.07910000 +vn 0.20670000 0.96630000 0.15360000 +vn 0.02450000 0.98660000 0.16140000 +vn 0.00340000 0.97750000 0.21110000 +vn -0.31950000 0.70510000 0.63310000 +vn -0.13490000 0.71360000 0.68750000 +vn -0.60390000 0.64990000 0.46140000 +vn -0.63180000 0.64010000 0.43720000 +vn -0.42430000 0.66670000 0.61270000 +vn -0.25990000 -0.55250000 0.79190000 +vn -0.42580000 -0.01080000 0.90480000 +vn 0.00950000 0.02170000 0.99970000 +vn 0.02200000 -0.00160000 0.99980000 +vn 0.41020000 0.84910000 0.33290000 +vn 0.99960000 -0.01160000 0.02590000 +vn 0.54150000 0.63700000 -0.54860000 +vn 0.70960000 -0.00970000 -0.70460000 +vn 0.04630000 -0.88920000 0.45520000 +vn -0.01070000 -0.14890000 0.98880000 +vn -0.04440000 0.72910000 0.68290000 +vn 0.12280000 0.99240000 0.00920000 +vn 0.48180000 -0.85750000 -0.18040000 +vn 0.45530000 -0.49990000 0.73670000 +vn -0.22050000 0.35830000 0.90720000 +vn -0.23590000 0.71580000 0.65730000 +vn 0.72810000 0.01560000 -0.68530000 +vn 0.88870000 0.01670000 0.45810000 +vn -0.26010000 -0.00080000 0.96560000 +vn -0.37160000 0.00440000 0.92840000 +vn 0.48020000 0.85890000 -0.17840000 +vn 0.72810000 0.01560000 -0.68530000 +vn 0.48810000 0.49800000 0.71680000 +vn 0.88870000 0.01670000 0.45810000 +vn -0.22200000 -0.36190000 0.90540000 +vn -0.26010000 -0.00080000 0.96560000 +vn -0.23540000 -0.71050000 0.66320000 +vn -0.37160000 0.00440000 0.92840000 +vn 0.05870000 0.89720000 0.43770000 +vn 0.00130000 0.16400000 0.98650000 +vn -0.04420000 -0.73030000 0.68170000 +vn 0.13880000 -0.98970000 -0.03420000 +vn -0.25890000 0.54540000 0.79720000 +vn 0.01230000 -0.01930000 0.99970000 +vn 0.39860000 -0.84570000 0.35490000 +vn 0.53760000 -0.61070000 -0.58140000 +vn 0.76260000 -0.31480000 0.56500000 +vn 0.82450000 0.00000000 0.56580000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.84800000 -0.35000000 -0.39800000 +vn 0.91770000 0.00000000 -0.39730000 +vn 0.86410000 -0.35640000 -0.35530000 +vn 0.93530000 -0.00010000 -0.35390000 +vn 0.72100000 -0.29790000 0.62560000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.58340000 -0.58330000 0.56520000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.64850000 -0.64840000 -0.39870000 +vn 0.66090000 -0.66070000 -0.35590000 +vn 0.55190000 -0.55180000 0.62530000 +vn 0.31480000 -0.76260000 0.56510000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.35000000 -0.84800000 -0.39800000 +vn 0.35650000 -0.86420000 -0.35520000 +vn 0.29800000 -0.72110000 0.62550000 +vn 0.00000000 -0.82450000 0.56580000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.00000000 -0.91770000 -0.39730000 +vn -0.00010000 -0.93530000 -0.35390000 +vn -0.00010000 -0.78070000 0.62490000 +vn -0.31480000 -0.76260000 0.56500000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.35000000 -0.84800000 -0.39800000 +vn -0.35640000 -0.86410000 -0.35530000 +vn -0.29790000 -0.72100000 0.62560000 +vn -0.58330000 -0.58340000 0.56520000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.64840000 -0.64850000 -0.39870000 +vn -0.66070000 -0.66090000 -0.35590000 +vn -0.55180000 -0.55190000 0.62530000 +vn -0.76260000 -0.31480000 0.56510000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.84800000 -0.35000000 -0.39800000 +vn -0.86420000 -0.35650000 -0.35520000 +vn -0.72110000 -0.29800000 0.62550000 +vn -0.82450000 0.00000000 0.56580000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.91770000 0.00000000 -0.39730000 +vn -0.93530000 0.00010000 -0.35390000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.76260000 0.31480000 0.56500000 +vn -0.82450000 0.00000000 0.56580000 +vn -0.84800000 0.35000000 -0.39800000 +vn -0.91770000 0.00000000 -0.39730000 +vn -0.86410000 0.35640000 -0.35530000 +vn -0.93530000 0.00010000 -0.35390000 +vn -0.72100000 0.29790000 0.62560000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.58340000 0.58330000 0.56520000 +vn -0.64850000 0.64840000 -0.39870000 +vn -0.66090000 0.66070000 -0.35590000 +vn -0.55190000 0.55180000 0.62530000 +vn -0.31480000 0.76260000 0.56510000 +vn -0.35000000 0.84800000 -0.39800000 +vn -0.35650000 0.86420000 -0.35520000 +vn -0.29800000 0.72110000 0.62550000 +vn 0.00000000 0.82450000 0.56580000 +vn 0.00000000 0.91770000 -0.39730000 +vn 0.00010000 0.93530000 -0.35390000 +vn 0.00010000 0.78070000 0.62490000 +vn 0.31480000 0.76260000 0.56500000 +vn 0.35000000 0.84800000 -0.39800000 +vn 0.35640000 0.86410000 -0.35530000 +vn 0.29790000 0.72100000 0.62560000 +vn 0.58330000 0.58340000 0.56520000 +vn 0.64840000 0.64850000 -0.39870000 +vn 0.66070000 0.66090000 -0.35590000 +vn 0.55180000 0.55190000 0.62530000 +vn 0.76260000 0.31480000 0.56510000 +vn 0.84800000 0.35000000 -0.39800000 +vn 0.86420000 0.35650000 -0.35520000 +vn 0.72110000 0.29800000 0.62550000 +vn 0.82450000 0.00000000 0.56580000 +vn 0.91770000 0.00000000 -0.39730000 +vn 0.93530000 -0.00010000 -0.35390000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.21800000 -0.09020000 0.97180000 +vn 0.23660000 0.00000000 0.97160000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.72100000 -0.29790000 0.62560000 +vn 0.15960000 -0.06600000 0.98500000 +vn 0.17310000 0.00000000 0.98490000 +vn 0.35050000 -0.14470000 0.92530000 +vn 0.37970000 0.00000000 0.92510000 +vn 0.48560000 -0.20150000 0.85070000 +vn 0.52670000 0.00000000 0.85010000 +vn 0.16660000 -0.16660000 0.97180000 +vn 0.55190000 -0.55180000 0.62530000 +vn 0.12190000 -0.12190000 0.98500000 +vn 0.26770000 -0.26770000 0.92560000 +vn 0.37130000 -0.37130000 0.85100000 +vn 0.09020000 -0.21800000 0.97180000 +vn 0.29800000 -0.72110000 0.62550000 +vn 0.06600000 -0.15960000 0.98500000 +vn 0.14470000 -0.35050000 0.92530000 +vn 0.20150000 -0.48560000 0.85070000 +vn 0.00000000 -0.23660000 0.97160000 +vn -0.00010000 -0.78070000 0.62490000 +vn 0.00000000 -0.17310000 0.98490000 +vn 0.00000000 -0.37970000 0.92510000 +vn 0.00000000 -0.52670000 0.85010000 +vn -0.09020000 -0.21800000 0.97180000 +vn -0.29790000 -0.72100000 0.62560000 +vn -0.06600000 -0.15960000 0.98500000 +vn -0.14470000 -0.35050000 0.92530000 +vn -0.20150000 -0.48560000 0.85070000 +vn -0.16660000 -0.16660000 0.97180000 +vn -0.55180000 -0.55190000 0.62530000 +vn -0.12190000 -0.12190000 0.98500000 +vn -0.26770000 -0.26770000 0.92560000 +vn -0.37130000 -0.37130000 0.85100000 +vn -0.21800000 -0.09020000 0.97180000 +vn -0.72110000 -0.29800000 0.62550000 +vn -0.15960000 -0.06600000 0.98500000 +vn -0.35050000 -0.14470000 0.92530000 +vn -0.48560000 -0.20150000 0.85070000 +vn -0.23660000 0.00000000 0.97160000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.17310000 0.00000000 0.98490000 +vn -0.37970000 0.00000000 0.92510000 +vn -0.52670000 0.00000000 0.85010000 +vn -0.21800000 0.09020000 0.97180000 +vn -0.23660000 0.00000000 0.97160000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.72100000 0.29790000 0.62560000 +vn -0.15960000 0.06600000 0.98500000 +vn -0.17310000 0.00000000 0.98490000 +vn -0.35050000 0.14470000 0.92530000 +vn -0.37970000 0.00000000 0.92510000 +vn -0.48560000 0.20150000 0.85070000 +vn -0.52670000 0.00000000 0.85010000 +vn -0.16660000 0.16660000 0.97180000 +vn -0.55190000 0.55180000 0.62530000 +vn -0.12190000 0.12190000 0.98500000 +vn -0.26770000 0.26770000 0.92560000 +vn -0.37130000 0.37130000 0.85100000 +vn -0.09020000 0.21800000 0.97180000 +vn -0.29800000 0.72110000 0.62550000 +vn -0.06600000 0.15960000 0.98500000 +vn -0.14470000 0.35050000 0.92530000 +vn -0.20150000 0.48560000 0.85070000 +vn 0.00000000 0.23660000 0.97160000 +vn 0.00010000 0.78070000 0.62490000 +vn 0.00000000 0.17310000 0.98490000 +vn 0.00000000 0.37970000 0.92510000 +vn 0.00000000 0.52670000 0.85010000 +vn 0.09020000 0.21800000 0.97180000 +vn 0.29790000 0.72100000 0.62560000 +vn 0.06600000 0.15960000 0.98500000 +vn 0.14470000 0.35050000 0.92530000 +vn 0.20150000 0.48560000 0.85070000 +vn 0.16660000 0.16660000 0.97180000 +vn 0.55180000 0.55190000 0.62530000 +vn 0.12190000 0.12190000 0.98500000 +vn 0.26770000 0.26770000 0.92560000 +vn 0.37130000 0.37130000 0.85100000 +vn 0.21800000 0.09020000 0.97180000 +vn 0.72110000 0.29800000 0.62550000 +vn 0.15960000 0.06600000 0.98500000 +vn 0.35050000 0.14470000 0.92530000 +vn 0.48560000 0.20150000 0.85070000 +vn 0.23660000 0.00000000 0.97160000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.17310000 0.00000000 0.98490000 +vn 0.37970000 0.00000000 0.92510000 +vn 0.52670000 0.00000000 0.85010000 +g Cube Instance_0 +f 1/1/1/1 2/2/2/2 3/3/3/3 +f 3/3/3/3 4/4/4/4 1/1/1/1 +f 5/5/5/5 6/6/6/6 2/2/2/2 +f 2/2/2/2 1/1/1/1 5/5/5/5 +f 7/7/7/7 8/8/8/8 6/6/6/6 +f 6/6/6/6 5/5/5/5 7/7/7/7 +f 9/9/9/9 10/10/10/10 8/8/8/8 +f 8/8/8/8 7/7/7/7 9/9/9/9 +f 11/11/11/11 1/1/1/1 4/4/4/4 +f 4/4/4/4 12/12/12/12 11/11/11/11 +f 13/13/13/13 5/5/5/5 1/1/1/1 +f 1/1/1/1 11/11/11/11 13/13/13/13 +f 14/14/14/14 7/7/7/7 5/5/5/5 +f 5/5/5/5 13/13/13/13 14/14/14/14 +f 15/15/15/15 9/9/9/9 7/7/7/7 +f 7/7/7/7 14/14/14/14 15/15/15/15 +f 16/16/16/16 11/11/11/11 12/12/12/12 +f 12/12/12/12 17/17/17/17 16/16/16/16 +f 18/18/18/18 13/13/13/13 11/11/11/11 +f 11/11/11/11 16/16/16/16 18/18/18/18 +f 19/19/19/19 14/14/14/14 13/13/13/13 +f 13/13/13/13 18/18/18/18 19/19/19/19 +f 20/20/20/20 15/15/15/15 14/14/14/14 +f 14/14/14/14 19/19/19/19 20/20/20/20 +f 21/21/21/21 16/16/16/16 17/17/17/17 +f 17/17/17/17 22/22/22/22 21/21/21/21 +f 23/23/23/23 18/18/18/18 16/16/16/16 +f 16/16/16/16 21/21/21/21 23/23/23/23 +f 24/24/24/24 19/19/19/19 18/18/18/18 +f 18/18/18/18 23/23/23/23 24/24/24/24 +f 25/25/25/25 20/20/20/20 19/19/19/19 +f 19/19/19/19 24/24/24/24 25/25/25/25 +f 26/26/26/26 21/21/21/21 22/22/22/22 +f 22/22/22/22 27/27/27/27 26/26/26/26 +f 28/28/28/28 23/23/23/23 21/21/21/21 +f 21/21/21/21 26/26/26/26 28/28/28/28 +f 29/29/29/29 24/24/24/24 23/23/23/23 +f 23/23/23/23 28/28/28/28 29/29/29/29 +f 30/30/30/30 25/25/25/25 24/24/24/24 +f 24/24/24/24 29/29/29/29 30/30/30/30 +f 31/31/31/31 26/26/26/26 27/27/27/27 +f 27/27/27/27 32/32/32/32 31/31/31/31 +f 33/33/33/33 28/28/28/28 26/26/26/26 +f 26/26/26/26 31/31/31/31 33/33/33/33 +f 34/34/34/34 29/29/29/29 28/28/28/28 +f 28/28/28/28 33/33/33/33 34/34/34/34 +f 35/35/35/35 30/30/30/30 29/29/29/29 +f 29/29/29/29 34/34/34/34 35/35/35/35 +f 36/36/36/36 31/31/31/31 32/32/32/32 +f 32/32/32/32 37/37/37/37 36/36/36/36 +f 38/38/38/38 33/33/33/33 31/31/31/31 +f 31/31/31/31 36/36/36/36 38/38/38/38 +f 39/39/39/39 34/34/34/34 33/33/33/33 +f 33/33/33/33 38/38/38/38 39/39/39/39 +f 40/40/40/40 35/35/35/35 34/34/34/34 +f 34/34/34/34 39/39/39/39 40/40/40/40 +f 41/41/41/41 36/36/36/36 37/37/37/37 +f 37/37/37/37 42/42/42/42 41/41/41/41 +f 43/43/43/43 38/38/38/38 36/36/36/36 +f 36/36/36/36 41/41/41/41 43/43/43/43 +f 44/44/44/44 39/39/39/39 38/38/38/38 +f 38/38/38/38 43/43/43/43 44/44/44/44 +f 45/45/45/45 40/40/40/40 39/39/39/39 +f 39/39/39/39 44/44/44/44 45/45/45/45 +f 46/46/46/46 47/47/47/47 48/48/48/48 +f 48/48/48/48 49/49/49/49 46/46/46/46 +f 50/50/50/50 51/51/51/51 47/47/47/47 +f 47/47/47/47 46/46/46/46 50/50/50/50 +f 52/52/52/52 53/53/53/53 51/51/51/51 +f 51/51/51/51 50/50/50/50 52/52/52/52 +f 54/54/54/54 55/55/55/55 53/53/53/53 +f 53/53/53/53 52/52/52/52 54/54/54/54 +f 56/56/56/56 46/46/46/46 49/49/49/49 +f 49/49/49/49 57/57/57/57 56/56/56/56 +f 58/58/58/58 50/50/50/50 46/46/46/46 +f 46/46/46/46 56/56/56/56 58/58/58/58 +f 59/59/59/59 52/52/52/52 50/50/50/50 +f 50/50/50/50 58/58/58/58 59/59/59/59 +f 60/60/60/60 54/54/54/54 52/52/52/52 +f 52/52/52/52 59/59/59/59 60/60/60/60 +f 61/61/61/61 56/56/56/56 57/57/57/57 +f 57/57/57/57 62/62/62/62 61/61/61/61 +f 63/63/63/63 58/58/58/58 56/56/56/56 +f 56/56/56/56 61/61/61/61 63/63/63/63 +f 64/64/64/64 59/59/59/59 58/58/58/58 +f 58/58/58/58 63/63/63/63 64/64/64/64 +f 65/65/65/65 60/60/60/60 59/59/59/59 +f 59/59/59/59 64/64/64/64 65/65/65/65 +f 66/66/66/66 61/61/61/61 62/62/62/62 +f 62/62/62/62 67/67/67/67 66/66/66/66 +f 68/68/68/68 63/63/63/63 61/61/61/61 +f 61/61/61/61 66/66/66/66 68/68/68/68 +f 69/69/69/69 64/64/64/64 63/63/63/63 +f 63/63/63/63 68/68/68/68 69/69/69/69 +f 70/70/70/70 65/65/65/65 64/64/64/64 +f 64/64/64/64 69/69/69/69 70/70/70/70 +f 71/71/71/71 66/66/66/66 67/67/67/67 +f 67/67/67/67 72/72/72/72 71/71/71/71 +f 73/73/73/73 68/68/68/68 66/66/66/66 +f 66/66/66/66 71/71/71/71 73/73/73/73 +f 74/74/74/74 69/69/69/69 68/68/68/68 +f 68/68/68/68 73/73/73/73 74/74/74/74 +f 75/75/75/75 70/70/70/70 69/69/69/69 +f 69/69/69/69 74/74/74/74 75/75/75/75 +f 76/76/76/76 71/71/71/71 72/72/72/72 +f 72/72/72/72 77/77/77/77 76/76/76/76 +f 78/78/78/78 73/73/73/73 71/71/71/71 +f 71/71/71/71 76/76/76/76 78/78/78/78 +f 79/79/79/79 74/74/74/74 73/73/73/73 +f 73/73/73/73 78/78/78/78 79/79/79/79 +f 80/80/80/80 75/75/75/75 74/74/74/74 +f 74/74/74/74 79/79/79/79 80/80/80/80 +f 81/81/81/81 76/76/76/76 77/77/77/77 +f 77/77/77/77 82/82/82/82 81/81/81/81 +f 83/83/83/83 78/78/78/78 76/76/76/76 +f 76/76/76/76 81/81/81/81 83/83/83/83 +f 84/84/84/84 79/79/79/79 78/78/78/78 +f 78/78/78/78 83/83/83/83 84/84/84/84 +f 85/85/85/85 80/80/80/80 79/79/79/79 +f 79/79/79/79 84/84/84/84 85/85/85/85 +f 86/86/86/86 81/81/81/81 82/82/82/82 +f 82/82/82/82 87/87/87/87 86/86/86/86 +f 88/88/88/88 83/83/83/83 81/81/81/81 +f 81/81/81/81 86/86/86/86 88/88/88/88 +f 89/89/89/89 84/84/84/84 83/83/83/83 +f 83/83/83/83 88/88/88/88 89/89/89/89 +f 90/90/90/90 85/85/85/85 84/84/84/84 +f 84/84/84/84 89/89/89/89 90/90/90/90 +f 91/91/91/91 92/92/92/92 10/10/10/10 +f 10/10/10/10 9/9/9/9 91/91/91/91 +f 93/93/93/93 94/94/94/94 92/92/92/92 +f 92/92/92/92 91/91/91/91 93/93/93/93 +f 95/95/95/95 96/96/96/96 94/94/94/94 +f 94/94/94/94 93/93/93/93 95/95/95/95 +f 97/97/97/97 98/98/98/98 96/96/96/96 +f 96/96/96/96 95/95/95/95 97/97/97/97 +f 99/99/99/99 91/91/91/91 9/9/9/9 +f 9/9/9/9 15/15/15/15 99/99/99/99 +f 100/100/100/100 93/93/93/93 91/91/91/91 +f 91/91/91/91 99/99/99/99 100/100/100/100 +f 101/101/101/101 95/95/95/95 93/93/93/93 +f 93/93/93/93 100/100/100/100 101/101/101/101 +f 102/102/102/102 97/97/97/97 95/95/95/95 +f 95/95/95/95 101/101/101/101 102/102/102/102 +f 103/103/103/103 99/99/99/99 15/15/15/15 +f 15/15/15/15 20/20/20/20 103/103/103/103 +f 104/104/104/104 100/100/100/100 99/99/99/99 +f 99/99/99/99 103/103/103/103 104/104/104/104 +f 105/105/105/105 101/101/101/101 100/100/100/100 +f 100/100/100/100 104/104/104/104 105/105/105/105 +f 106/106/106/106 102/102/102/102 101/101/101/101 +f 101/101/101/101 105/105/105/105 106/106/106/106 +f 107/107/107/107 103/103/103/103 20/20/20/20 +f 20/20/20/20 25/25/25/25 107/107/107/107 +f 108/108/108/108 104/104/104/104 103/103/103/103 +f 103/103/103/103 107/107/107/107 108/108/108/108 +f 109/109/109/109 105/105/105/105 104/104/104/104 +f 104/104/104/104 108/108/108/108 109/109/109/109 +f 110/110/110/110 106/106/106/106 105/105/105/105 +f 105/105/105/105 109/109/109/109 110/110/110/110 +f 111/111/111/111 107/107/107/107 25/25/25/25 +f 25/25/25/25 30/30/30/30 111/111/111/111 +f 112/112/112/112 108/108/108/108 107/107/107/107 +f 107/107/107/107 111/111/111/111 112/112/112/112 +f 113/113/113/113 109/109/109/109 108/108/108/108 +f 108/108/108/108 112/112/112/112 113/113/113/113 +f 114/114/114/114 110/110/110/110 109/109/109/109 +f 109/109/109/109 113/113/113/113 114/114/114/114 +f 115/115/115/115 111/111/111/111 30/30/30/30 +f 30/30/30/30 35/35/35/35 115/115/115/115 +f 116/116/116/116 112/112/112/112 111/111/111/111 +f 111/111/111/111 115/115/115/115 116/116/116/116 +f 117/117/117/117 113/113/113/113 112/112/112/112 +f 112/112/112/112 116/116/116/116 117/117/117/117 +f 118/118/118/118 114/114/114/114 113/113/113/113 +f 113/113/113/113 117/117/117/117 118/118/118/118 +f 119/119/119/119 115/115/115/115 35/35/35/35 +f 35/35/35/35 40/40/40/40 119/119/119/119 +f 120/120/120/120 116/116/116/116 115/115/115/115 +f 115/115/115/115 119/119/119/119 120/120/120/120 +f 121/121/121/121 117/117/117/117 116/116/116/116 +f 116/116/116/116 120/120/120/120 121/121/121/121 +f 122/122/122/122 118/118/118/118 117/117/117/117 +f 117/117/117/117 121/121/121/121 122/122/122/122 +f 123/123/123/123 119/119/119/119 40/40/40/40 +f 40/40/40/40 45/45/45/45 123/123/123/123 +f 124/124/124/124 120/120/120/120 119/119/119/119 +f 119/119/119/119 123/123/123/123 124/124/124/124 +f 125/125/125/125 121/121/121/121 120/120/120/120 +f 120/120/120/120 124/124/124/124 125/125/125/125 +f 126/126/126/126 122/122/122/122 121/121/121/121 +f 121/121/121/121 125/125/125/125 126/126/126/126 +f 127/127/127/127 128/128/128/128 55/55/55/55 +f 55/55/55/55 54/54/54/54 127/127/127/127 +f 129/129/129/129 130/130/130/130 128/128/128/128 +f 128/128/128/128 127/127/127/127 129/129/129/129 +f 131/131/131/131 132/132/132/132 130/130/130/130 +f 130/130/130/130 129/129/129/129 131/131/131/131 +f 133/133/133/133 134/134/134/134 132/132/132/132 +f 132/132/132/132 131/131/131/131 133/133/133/133 +f 135/135/135/135 127/127/127/127 54/54/54/54 +f 54/54/54/54 60/60/60/60 135/135/135/135 +f 136/136/136/136 129/129/129/129 127/127/127/127 +f 127/127/127/127 135/135/135/135 136/136/136/136 +f 137/137/137/137 131/131/131/131 129/129/129/129 +f 129/129/129/129 136/136/136/136 137/137/137/137 +f 138/138/138/138 133/133/133/133 131/131/131/131 +f 131/131/131/131 137/137/137/137 138/138/138/138 +f 139/139/139/139 135/135/135/135 60/60/60/60 +f 60/60/60/60 65/65/65/65 139/139/139/139 +f 140/140/140/140 136/136/136/136 135/135/135/135 +f 135/135/135/135 139/139/139/139 140/140/140/140 +f 141/141/141/141 137/137/137/137 136/136/136/136 +f 136/136/136/136 140/140/140/140 141/141/141/141 +f 142/142/142/142 138/138/138/138 137/137/137/137 +f 137/137/137/137 141/141/141/141 142/142/142/142 +f 143/143/143/143 139/139/139/139 65/65/65/65 +f 65/65/65/65 70/70/70/70 143/143/143/143 +f 144/144/144/144 140/140/140/140 139/139/139/139 +f 139/139/139/139 143/143/143/143 144/144/144/144 +f 145/145/145/145 141/141/141/141 140/140/140/140 +f 140/140/140/140 144/144/144/144 145/145/145/145 +f 146/146/146/146 142/142/142/142 141/141/141/141 +f 141/141/141/141 145/145/145/145 146/146/146/146 +f 147/147/147/147 143/143/143/143 70/70/70/70 +f 70/70/70/70 75/75/75/75 147/147/147/147 +f 148/148/148/148 144/144/144/144 143/143/143/143 +f 143/143/143/143 147/147/147/147 148/148/148/148 +f 149/149/149/149 145/145/145/145 144/144/144/144 +f 144/144/144/144 148/148/148/148 149/149/149/149 +f 150/150/150/150 146/146/146/146 145/145/145/145 +f 145/145/145/145 149/149/149/149 150/150/150/150 +f 151/151/151/151 147/147/147/147 75/75/75/75 +f 75/75/75/75 80/80/80/80 151/151/151/151 +f 152/152/152/152 148/148/148/148 147/147/147/147 +f 147/147/147/147 151/151/151/151 152/152/152/152 +f 153/153/153/153 149/149/149/149 148/148/148/148 +f 148/148/148/148 152/152/152/152 153/153/153/153 +f 154/154/154/154 150/150/150/150 149/149/149/149 +f 149/149/149/149 153/153/153/153 154/154/154/154 +f 155/155/155/155 151/151/151/151 80/80/80/80 +f 80/80/80/80 85/85/85/85 155/155/155/155 +f 156/156/156/156 152/152/152/152 151/151/151/151 +f 151/151/151/151 155/155/155/155 156/156/156/156 +f 157/157/157/157 153/153/153/153 152/152/152/152 +f 152/152/152/152 156/156/156/156 157/157/157/157 +f 158/158/158/158 154/154/154/154 153/153/153/153 +f 153/153/153/153 157/157/157/157 158/158/158/158 +f 159/159/159/159 155/155/155/155 85/85/85/85 +f 85/85/85/85 90/90/90/90 159/159/159/159 +f 160/160/160/160 156/156/156/156 155/155/155/155 +f 155/155/155/155 159/159/159/159 160/160/160/160 +f 161/161/161/161 157/157/157/157 156/156/156/156 +f 156/156/156/156 160/160/160/160 161/161/161/161 +f 162/162/162/162 158/158/158/158 157/157/157/157 +f 157/157/157/157 161/161/161/161 162/162/162/162 +f 163/163/163/163 164/164/164/164 98/98/98/98 +f 98/98/98/98 97/97/97/97 163/163/163/163 +f 165/165/165/165 166/166/166/166 164/164/164/164 +f 164/164/164/164 163/163/163/163 165/165/165/165 +f 167/167/167/167 168/168/168/168 166/166/166/166 +f 166/166/166/166 165/165/165/165 167/167/167/167 +f 169/169/169/169 170/170/170/170 168/168/168/168 +f 168/168/168/168 167/167/167/167 169/169/169/169 +f 171/171/171/171 163/163/163/163 97/97/97/97 +f 97/97/97/97 102/102/102/102 171/171/171/171 +f 172/172/172/172 165/165/165/165 163/163/163/163 +f 163/163/163/163 171/171/171/171 172/172/172/172 +f 173/173/173/173 167/167/167/167 165/165/165/165 +f 165/165/165/165 172/172/172/172 173/173/173/173 +f 174/174/174/174 169/169/169/169 167/167/167/167 +f 167/167/167/167 173/173/173/173 174/174/174/174 +f 175/175/175/175 171/171/171/171 102/102/102/102 +f 102/102/102/102 106/106/106/106 175/175/175/175 +f 176/176/176/176 172/172/172/172 171/171/171/171 +f 171/171/171/171 175/175/175/175 176/176/176/176 +f 177/177/177/177 173/173/173/173 172/172/172/172 +f 172/172/172/172 176/176/176/176 177/177/177/177 +f 178/178/178/178 174/174/174/174 173/173/173/173 +f 173/173/173/173 177/177/177/177 178/178/178/178 +f 179/179/179/179 175/175/175/175 106/106/106/106 +f 106/106/106/106 110/110/110/110 179/179/179/179 +f 180/180/180/180 176/176/176/176 175/175/175/175 +f 175/175/175/175 179/179/179/179 180/180/180/180 +f 181/181/181/181 177/177/177/177 176/176/176/176 +f 176/176/176/176 180/180/180/180 181/181/181/181 +f 182/182/182/182 178/178/178/178 177/177/177/177 +f 177/177/177/177 181/181/181/181 182/182/182/182 +f 183/183/183/183 179/179/179/179 110/110/110/110 +f 110/110/110/110 114/114/114/114 183/183/183/183 +f 184/184/184/184 180/180/180/180 179/179/179/179 +f 179/179/179/179 183/183/183/183 184/184/184/184 +f 185/185/185/185 181/181/181/181 180/180/180/180 +f 180/180/180/180 184/184/184/184 185/185/185/185 +f 186/186/186/186 182/182/182/182 181/181/181/181 +f 181/181/181/181 185/185/185/185 186/186/186/186 +f 187/187/187/187 183/183/183/183 114/114/114/114 +f 114/114/114/114 118/118/118/118 187/187/187/187 +f 188/188/188/188 184/184/184/184 183/183/183/183 +f 183/183/183/183 187/187/187/187 188/188/188/188 +f 189/189/189/189 185/185/185/185 184/184/184/184 +f 184/184/184/184 188/188/188/188 189/189/189/189 +f 190/190/190/190 186/186/186/186 185/185/185/185 +f 185/185/185/185 189/189/189/189 190/190/190/190 +f 191/191/191/191 187/187/187/187 118/118/118/118 +f 118/118/118/118 122/122/122/122 191/191/191/191 +f 192/192/192/192 188/188/188/188 187/187/187/187 +f 187/187/187/187 191/191/191/191 192/192/192/192 +f 193/193/193/193 189/189/189/189 188/188/188/188 +f 188/188/188/188 192/192/192/192 193/193/193/193 +f 194/194/194/194 190/190/190/190 189/189/189/189 +f 189/189/189/189 193/193/193/193 194/194/194/194 +f 195/195/195/195 191/191/191/191 122/122/122/122 +f 122/122/122/122 126/126/126/126 195/195/195/195 +f 196/196/196/196 192/192/192/192 191/191/191/191 +f 191/191/191/191 195/195/195/195 196/196/196/196 +f 197/197/197/197 193/193/193/193 192/192/192/192 +f 192/192/192/192 196/196/196/196 197/197/197/197 +f 198/198/198/198 194/194/194/194 193/193/193/193 +f 193/193/193/193 197/197/197/197 198/198/198/198 +f 199/199/199/199 200/200/200/200 134/134/134/134 +f 134/134/134/134 133/133/133/133 199/199/199/199 +f 201/201/201/201 202/202/202/202 200/200/200/200 +f 200/200/200/200 199/199/199/199 201/201/201/201 +f 203/203/203/203 204/204/204/204 202/202/202/202 +f 202/202/202/202 201/201/201/201 203/203/203/203 +f 205/205/205/205 206/206/206/206 204/204/204/204 +f 204/204/204/204 203/203/203/203 205/205/205/205 +f 207/207/207/207 199/199/199/199 133/133/133/133 +f 133/133/133/133 138/138/138/138 207/207/207/207 +f 208/208/208/208 201/201/201/201 199/199/199/199 +f 199/199/199/199 207/207/207/207 208/208/208/208 +f 209/209/209/209 203/203/203/203 201/201/201/201 +f 201/201/201/201 208/208/208/208 209/209/209/209 +f 210/210/210/210 205/205/205/205 203/203/203/203 +f 203/203/203/203 209/209/209/209 210/210/210/210 +f 211/211/211/211 207/207/207/207 138/138/138/138 +f 138/138/138/138 142/142/142/142 211/211/211/211 +f 212/212/212/212 208/208/208/208 207/207/207/207 +f 207/207/207/207 211/211/211/211 212/212/212/212 +f 213/213/213/213 209/209/209/209 208/208/208/208 +f 208/208/208/208 212/212/212/212 213/213/213/213 +f 214/214/214/214 210/210/210/210 209/209/209/209 +f 209/209/209/209 213/213/213/213 214/214/214/214 +f 215/215/215/215 211/211/211/211 142/142/142/142 +f 142/142/142/142 146/146/146/146 215/215/215/215 +f 216/216/216/216 212/212/212/212 211/211/211/211 +f 211/211/211/211 215/215/215/215 216/216/216/216 +f 217/217/217/217 213/213/213/213 212/212/212/212 +f 212/212/212/212 216/216/216/216 217/217/217/217 +f 218/218/218/218 214/214/214/214 213/213/213/213 +f 213/213/213/213 217/217/217/217 218/218/218/218 +f 219/219/219/219 215/215/215/215 146/146/146/146 +f 146/146/146/146 150/150/150/150 219/219/219/219 +f 220/220/220/220 216/216/216/216 215/215/215/215 +f 215/215/215/215 219/219/219/219 220/220/220/220 +f 221/221/221/221 217/217/217/217 216/216/216/216 +f 216/216/216/216 220/220/220/220 221/221/221/221 +f 222/222/222/222 218/218/218/218 217/217/217/217 +f 217/217/217/217 221/221/221/221 222/222/222/222 +f 223/223/223/223 219/219/219/219 150/150/150/150 +f 150/150/150/150 154/154/154/154 223/223/223/223 +f 224/224/224/224 220/220/220/220 219/219/219/219 +f 219/219/219/219 223/223/223/223 224/224/224/224 +f 225/225/225/225 221/221/221/221 220/220/220/220 +f 220/220/220/220 224/224/224/224 225/225/225/225 +f 226/226/226/226 222/222/222/222 221/221/221/221 +f 221/221/221/221 225/225/225/225 226/226/226/226 +f 227/227/227/227 223/223/223/223 154/154/154/154 +f 154/154/154/154 158/158/158/158 227/227/227/227 +f 228/228/228/228 224/224/224/224 223/223/223/223 +f 223/223/223/223 227/227/227/227 228/228/228/228 +f 229/229/229/229 225/225/225/225 224/224/224/224 +f 224/224/224/224 228/228/228/228 229/229/229/229 +f 230/230/230/230 226/226/226/226 225/225/225/225 +f 225/225/225/225 229/229/229/229 230/230/230/230 +f 231/231/231/231 227/227/227/227 158/158/158/158 +f 158/158/158/158 162/162/162/162 231/231/231/231 +f 232/232/232/232 228/228/228/228 227/227/227/227 +f 227/227/227/227 231/231/231/231 232/232/232/232 +f 233/233/233/233 229/229/229/229 228/228/228/228 +f 228/228/228/228 232/232/232/232 233/233/233/233 +f 234/234/234/234 230/230/230/230 229/229/229/229 +f 229/229/229/229 233/233/233/233 234/234/234/234 +f 235/235/235/235 236/236/236/236 170/170/170/170 +f 170/170/170/170 169/169/169/169 235/235/235/235 +f 237/237/237/237 238/238/238/238 236/236/236/236 +f 236/236/236/236 235/235/235/235 237/237/237/237 +f 239/239/239/239 240/240/240/240 238/238/238/238 +f 238/238/238/238 237/237/237/237 239/239/239/239 +f 240/240/240/240 239/239/239/239 241/241/241/241 +f 242/242/242/242 235/235/235/235 169/169/169/169 +f 169/169/169/169 174/174/174/174 242/242/242/242 +f 243/243/243/243 237/237/237/237 235/235/235/235 +f 235/235/235/235 242/242/242/242 243/243/243/243 +f 244/244/244/244 239/239/239/239 237/237/237/237 +f 237/237/237/237 243/243/243/243 244/244/244/244 +f 239/239/239/239 244/244/244/244 245/245/245/245 +f 246/246/246/246 242/242/242/242 174/174/174/174 +f 174/174/174/174 178/178/178/178 246/246/246/246 +f 247/247/247/247 243/243/243/243 242/242/242/242 +f 242/242/242/242 246/246/246/246 247/247/247/247 +f 248/248/248/248 244/244/244/244 243/243/243/243 +f 243/243/243/243 247/247/247/247 248/248/248/248 +f 244/244/244/244 248/248/248/248 249/249/249/249 +f 250/250/250/250 246/246/246/246 178/178/178/178 +f 178/178/178/178 182/182/182/182 250/250/250/250 +f 251/251/251/251 247/247/247/247 246/246/246/246 +f 246/246/246/246 250/250/250/250 251/251/251/251 +f 252/252/252/252 248/248/248/248 247/247/247/247 +f 247/247/247/247 251/251/251/251 252/252/252/252 +f 248/248/248/248 252/252/252/252 253/253/253/253 +f 254/254/254/254 250/250/250/250 182/182/182/182 +f 182/182/182/182 186/186/186/186 254/254/254/254 +f 255/255/255/255 251/251/251/251 250/250/250/250 +f 250/250/250/250 254/254/254/254 255/255/255/255 +f 256/256/256/256 252/252/252/252 251/251/251/251 +f 251/251/251/251 255/255/255/255 256/256/256/256 +f 252/252/252/252 256/256/256/256 257/257/257/257 +f 258/258/258/258 254/254/254/254 186/186/186/186 +f 186/186/186/186 190/190/190/190 258/258/258/258 +f 259/259/259/259 255/255/255/255 254/254/254/254 +f 254/254/254/254 258/258/258/258 259/259/259/259 +f 260/260/260/260 256/256/256/256 255/255/255/255 +f 255/255/255/255 259/259/259/259 260/260/260/260 +f 256/256/256/256 260/260/260/260 261/261/261/261 +f 262/262/262/262 258/258/258/258 190/190/190/190 +f 190/190/190/190 194/194/194/194 262/262/262/262 +f 263/263/263/263 259/259/259/259 258/258/258/258 +f 258/258/258/258 262/262/262/262 263/263/263/263 +f 264/264/264/264 260/260/260/260 259/259/259/259 +f 259/259/259/259 263/263/263/263 264/264/264/264 +f 260/260/260/260 264/264/264/264 265/265/265/265 +f 266/266/266/266 262/262/262/262 194/194/194/194 +f 194/194/194/194 198/198/198/198 266/266/266/266 +f 267/267/267/267 263/263/263/263 262/262/262/262 +f 262/262/262/262 266/266/266/266 267/267/267/267 +f 268/268/268/268 264/264/264/264 263/263/263/263 +f 263/263/263/263 267/267/267/267 268/268/268/268 +f 264/264/264/264 268/268/268/268 269/269/269/269 +f 270/270/270/270 271/271/271/271 206/206/206/206 +f 206/206/206/206 205/205/205/205 270/270/270/270 +f 272/272/272/272 273/273/273/273 271/271/271/271 +f 271/271/271/271 270/270/270/270 272/272/272/272 +f 274/274/274/274 275/275/275/275 273/273/273/273 +f 273/273/273/273 272/272/272/272 274/274/274/274 +f 275/275/275/275 274/274/274/274 241/241/241/241 +f 276/276/276/276 270/270/270/270 205/205/205/205 +f 205/205/205/205 210/210/210/210 276/276/276/276 +f 277/277/277/277 272/272/272/272 270/270/270/270 +f 270/270/270/270 276/276/276/276 277/277/277/277 +f 278/278/278/278 274/274/274/274 272/272/272/272 +f 272/272/272/272 277/277/277/277 278/278/278/278 +f 274/274/274/274 278/278/278/278 245/245/245/245 +f 279/279/279/279 276/276/276/276 210/210/210/210 +f 210/210/210/210 214/214/214/214 279/279/279/279 +f 280/280/280/280 277/277/277/277 276/276/276/276 +f 276/276/276/276 279/279/279/279 280/280/280/280 +f 281/281/281/281 278/278/278/278 277/277/277/277 +f 277/277/277/277 280/280/280/280 281/281/281/281 +f 278/278/278/278 281/281/281/281 249/249/249/249 +f 282/282/282/282 279/279/279/279 214/214/214/214 +f 214/214/214/214 218/218/218/218 282/282/282/282 +f 283/283/283/283 280/280/280/280 279/279/279/279 +f 279/279/279/279 282/282/282/282 283/283/283/283 +f 284/284/284/284 281/281/281/281 280/280/280/280 +f 280/280/280/280 283/283/283/283 284/284/284/284 +f 281/281/281/281 284/284/284/284 253/253/253/253 +f 285/285/285/285 282/282/282/282 218/218/218/218 +f 218/218/218/218 222/222/222/222 285/285/285/285 +f 286/286/286/286 283/283/283/283 282/282/282/282 +f 282/282/282/282 285/285/285/285 286/286/286/286 +f 287/287/287/287 284/284/284/284 283/283/283/283 +f 283/283/283/283 286/286/286/286 287/287/287/287 +f 284/284/284/284 287/287/287/287 257/257/257/257 +f 288/288/288/288 285/285/285/285 222/222/222/222 +f 222/222/222/222 226/226/226/226 288/288/288/288 +f 289/289/289/289 286/286/286/286 285/285/285/285 +f 285/285/285/285 288/288/288/288 289/289/289/289 +f 290/290/290/290 287/287/287/287 286/286/286/286 +f 286/286/286/286 289/289/289/289 290/290/290/290 +f 287/287/287/287 290/290/290/290 261/261/261/261 +f 291/291/291/291 288/288/288/288 226/226/226/226 +f 226/226/226/226 230/230/230/230 291/291/291/291 +f 292/292/292/292 289/289/289/289 288/288/288/288 +f 288/288/288/288 291/291/291/291 292/292/292/292 +f 293/293/293/293 290/290/290/290 289/289/289/289 +f 289/289/289/289 292/292/292/292 293/293/293/293 +f 290/290/290/290 293/293/293/293 265/265/265/265 +f 294/294/294/294 291/291/291/291 230/230/230/230 +f 230/230/230/230 234/234/234/234 294/294/294/294 +f 295/295/295/295 292/292/292/292 291/291/291/291 +f 291/291/291/291 294/294/294/294 295/295/295/295 +f 296/296/296/296 293/293/293/293 292/292/292/292 +f 292/292/292/292 295/295/295/295 296/296/296/296 +f 293/293/293/293 296/296/296/296 269/269/269/269 +f 297/297/297/297 298/298/298/298 299/299/299/299 +f 299/299/299/299 300/300/300/300 297/297/297/297 +f 301/301/301/301 302/302/302/302 298/298/298/298 +f 298/298/298/298 297/297/297/297 301/301/301/301 +f 303/303/303/303 304/304/304/304 302/302/302/302 +f 302/302/302/302 301/301/301/301 303/303/303/303 +f 305/305/305/305 306/306/306/306 304/304/304/304 +f 304/304/304/304 303/303/303/303 305/305/305/305 +f 307/307/307/307 297/297/297/297 300/300/300/300 +f 300/300/300/300 308/308/308/308 307/307/307/307 +f 309/309/309/309 301/301/301/301 297/297/297/297 +f 297/297/297/297 307/307/307/307 309/309/309/309 +f 310/310/310/310 303/303/303/303 301/301/301/301 +f 301/301/301/301 309/309/309/309 310/310/310/310 +f 311/311/311/311 305/305/305/305 303/303/303/303 +f 303/303/303/303 310/310/310/310 311/311/311/311 +f 312/312/312/312 307/307/307/307 308/308/308/308 +f 308/308/308/308 313/313/313/313 312/312/312/312 +f 314/314/314/314 309/309/309/309 307/307/307/307 +f 307/307/307/307 312/312/312/312 314/314/314/314 +f 315/315/315/315 310/310/310/310 309/309/309/309 +f 309/309/309/309 314/314/314/314 315/315/315/315 +f 316/316/316/316 311/311/311/311 310/310/310/310 +f 310/310/310/310 315/315/315/315 316/316/316/316 +f 317/317/317/317 312/312/312/312 313/313/313/313 +f 313/313/313/313 318/318/318/318 317/317/317/317 +f 319/319/319/319 314/314/314/314 312/312/312/312 +f 312/312/312/312 317/317/317/317 319/319/319/319 +f 320/320/320/320 315/315/315/315 314/314/314/314 +f 314/314/314/314 319/319/319/319 320/320/320/320 +f 321/321/321/321 316/316/316/316 315/315/315/315 +f 315/315/315/315 320/320/320/320 321/321/321/321 +f 322/322/322/322 317/317/317/317 318/318/318/318 +f 318/318/318/318 323/323/323/323 322/322/322/322 +f 324/324/324/324 319/319/319/319 317/317/317/317 +f 317/317/317/317 322/322/322/322 324/324/324/324 +f 325/325/325/325 320/320/320/320 319/319/319/319 +f 319/319/319/319 324/324/324/324 325/325/325/325 +f 326/326/326/326 321/321/321/321 320/320/320/320 +f 320/320/320/320 325/325/325/325 326/326/326/326 +f 327/327/327/327 322/322/322/322 323/323/323/323 +f 323/323/323/323 328/328/328/328 327/327/327/327 +f 329/329/329/329 324/324/324/324 322/322/322/322 +f 322/322/322/322 327/327/327/327 329/329/329/329 +f 330/330/330/330 325/325/325/325 324/324/324/324 +f 324/324/324/324 329/329/329/329 330/330/330/330 +f 331/331/331/331 326/326/326/326 325/325/325/325 +f 325/325/325/325 330/330/330/330 331/331/331/331 +f 332/332/332/332 327/327/327/327 328/328/328/328 +f 328/328/328/328 333/333/333/333 332/332/332/332 +f 334/334/334/334 329/329/329/329 327/327/327/327 +f 327/327/327/327 332/332/332/332 334/334/334/334 +f 335/335/335/335 330/330/330/330 329/329/329/329 +f 329/329/329/329 334/334/334/334 335/335/335/335 +f 336/336/336/336 331/331/331/331 330/330/330/330 +f 330/330/330/330 335/335/335/335 336/336/336/336 +f 337/337/337/337 332/332/332/332 333/333/333/333 +f 333/333/333/333 338/338/338/338 337/337/337/337 +f 339/339/339/339 334/334/334/334 332/332/332/332 +f 332/332/332/332 337/337/337/337 339/339/339/339 +f 340/340/340/340 335/335/335/335 334/334/334/334 +f 334/334/334/334 339/339/339/339 340/340/340/340 +f 341/341/341/341 336/336/336/336 335/335/335/335 +f 335/335/335/335 340/340/340/340 341/341/341/341 +f 342/342/342/342 343/343/343/343 306/306/306/306 +f 306/306/306/306 305/305/305/305 342/342/342/342 +f 344/344/344/344 345/345/345/345 343/343/343/343 +f 343/343/343/343 342/342/342/342 344/344/344/344 +f 346/346/346/346 347/347/347/347 345/345/345/345 +f 345/345/345/345 344/344/344/344 346/346/346/346 +f 348/348/348/348 349/349/349/349 347/347/347/347 +f 347/347/347/347 346/346/346/346 348/348/348/348 +f 350/350/350/350 342/342/342/342 305/305/305/305 +f 305/305/305/305 311/311/311/311 350/350/350/350 +f 351/351/351/351 344/344/344/344 342/342/342/342 +f 342/342/342/342 350/350/350/350 351/351/351/351 +f 352/352/352/352 346/346/346/346 344/344/344/344 +f 344/344/344/344 351/351/351/351 352/352/352/352 +f 353/353/353/353 348/348/348/348 346/346/346/346 +f 346/346/346/346 352/352/352/352 353/353/353/353 +f 354/354/354/354 350/350/350/350 311/311/311/311 +f 311/311/311/311 316/316/316/316 354/354/354/354 +f 355/355/355/355 351/351/351/351 350/350/350/350 +f 350/350/350/350 354/354/354/354 355/355/355/355 +f 356/356/356/356 352/352/352/352 351/351/351/351 +f 351/351/351/351 355/355/355/355 356/356/356/356 +f 357/357/357/357 353/353/353/353 352/352/352/352 +f 352/352/352/352 356/356/356/356 357/357/357/357 +f 358/358/358/358 354/354/354/354 316/316/316/316 +f 316/316/316/316 321/321/321/321 358/358/358/358 +f 359/359/359/359 355/355/355/355 354/354/354/354 +f 354/354/354/354 358/358/358/358 359/359/359/359 +f 360/360/360/360 356/356/356/356 355/355/355/355 +f 355/355/355/355 359/359/359/359 360/360/360/360 +f 361/361/361/361 357/357/357/357 356/356/356/356 +f 356/356/356/356 360/360/360/360 361/361/361/361 +f 362/362/362/362 358/358/358/358 321/321/321/321 +f 321/321/321/321 326/326/326/326 362/362/362/362 +f 363/363/363/363 359/359/359/359 358/358/358/358 +f 358/358/358/358 362/362/362/362 363/363/363/363 +f 364/364/364/364 360/360/360/360 359/359/359/359 +f 359/359/359/359 363/363/363/363 364/364/364/364 +f 365/365/365/365 361/361/361/361 360/360/360/360 +f 360/360/360/360 364/364/364/364 365/365/365/365 +f 366/366/366/366 362/362/362/362 326/326/326/326 +f 326/326/326/326 331/331/331/331 366/366/366/366 +f 367/367/367/367 363/363/363/363 362/362/362/362 +f 362/362/362/362 366/366/366/366 367/367/367/367 +f 368/368/368/368 364/364/364/364 363/363/363/363 +f 363/363/363/363 367/367/367/367 368/368/368/368 +f 369/369/369/369 365/365/365/365 364/364/364/364 +f 364/364/364/364 368/368/368/368 369/369/369/369 +f 370/370/370/370 366/366/366/366 331/331/331/331 +f 331/331/331/331 336/336/336/336 370/370/370/370 +f 371/371/371/371 367/367/367/367 366/366/366/366 +f 366/366/366/366 370/370/370/370 371/371/371/371 +f 372/372/372/372 368/368/368/368 367/367/367/367 +f 367/367/367/367 371/371/371/371 372/372/372/372 +f 373/373/373/373 369/369/369/369 368/368/368/368 +f 368/368/368/368 372/372/372/372 373/373/373/373 +f 374/374/374/374 370/370/370/370 336/336/336/336 +f 336/336/336/336 341/341/341/341 374/374/374/374 +f 375/375/375/375 371/371/371/371 370/370/370/370 +f 370/370/370/370 374/374/374/374 375/375/375/375 +f 376/376/376/376 372/372/372/372 371/371/371/371 +f 371/371/371/371 375/375/375/375 376/376/376/376 +f 377/377/377/377 373/373/373/373 372/372/372/372 +f 372/372/372/372 376/376/376/376 377/377/377/377 +f 378/378/378/378 379/379/379/379 380/380/380/380 +f 380/380/380/380 381/381/381/381 378/378/378/378 +f 382/382/382/382 383/383/383/383 379/379/379/379 +f 379/379/379/379 378/378/378/378 382/382/382/382 +f 384/384/384/384 385/385/385/385 383/383/383/383 +f 383/383/383/383 382/382/382/382 384/384/384/384 +f 386/386/386/386 387/387/387/387 385/385/385/385 +f 385/385/385/385 384/384/384/384 386/386/386/386 +f 388/388/388/388 378/378/378/378 381/381/381/381 +f 381/381/381/381 389/389/389/389 388/388/388/388 +f 390/390/390/390 382/382/382/382 378/378/378/378 +f 378/378/378/378 388/388/388/388 390/390/390/390 +f 391/391/391/391 384/384/384/384 382/382/382/382 +f 382/382/382/382 390/390/390/390 391/391/391/391 +f 392/392/392/392 386/386/386/386 384/384/384/384 +f 384/384/384/384 391/391/391/391 392/392/392/392 +f 393/393/393/393 388/388/388/388 389/389/389/389 +f 389/389/389/389 394/394/394/394 393/393/393/393 +f 395/395/395/395 390/390/390/390 388/388/388/388 +f 388/388/388/388 393/393/393/393 395/395/395/395 +f 396/396/396/396 391/391/391/391 390/390/390/390 +f 390/390/390/390 395/395/395/395 396/396/396/396 +f 397/397/397/397 392/392/392/392 391/391/391/391 +f 391/391/391/391 396/396/396/396 397/397/397/397 +f 398/398/398/398 393/393/393/393 394/394/394/394 +f 394/394/394/394 399/399/399/399 398/398/398/398 +f 400/400/400/400 395/395/395/395 393/393/393/393 +f 393/393/393/393 398/398/398/398 400/400/400/400 +f 401/401/401/401 396/396/396/396 395/395/395/395 +f 395/395/395/395 400/400/400/400 401/401/401/401 +f 402/402/402/402 397/397/397/397 396/396/396/396 +f 396/396/396/396 401/401/401/401 402/402/402/402 +f 403/403/403/403 404/404/404/404 405/405/405/405 +f 405/405/405/405 406/406/406/406 403/403/403/403 +f 407/407/407/407 408/408/408/408 404/404/404/404 +f 404/404/404/404 403/403/403/403 407/407/407/407 +f 409/409/409/409 410/410/410/410 408/408/408/408 +f 408/408/408/408 407/407/407/407 409/409/409/409 +f 411/411/411/411 412/412/412/412 410/410/410/410 +f 410/410/410/410 409/409/409/409 411/411/411/411 +f 413/413/413/413 403/403/403/403 406/406/406/406 +f 406/406/406/406 414/414/414/414 413/413/413/413 +f 415/415/415/415 407/407/407/407 403/403/403/403 +f 403/403/403/403 413/413/413/413 415/415/415/415 +f 416/416/416/416 409/409/409/409 407/407/407/407 +f 407/407/407/407 415/415/415/415 416/416/416/416 +f 417/417/417/417 411/411/411/411 409/409/409/409 +f 409/409/409/409 416/416/416/416 417/417/417/417 +f 418/418/418/418 413/413/413/413 414/414/414/414 +f 414/414/414/414 419/419/419/419 418/418/418/418 +f 420/420/420/420 415/415/415/415 413/413/413/413 +f 413/413/413/413 418/418/418/418 420/420/420/420 +f 421/421/421/421 416/416/416/416 415/415/415/415 +f 415/415/415/415 420/420/420/420 421/421/421/421 +f 422/422/422/422 417/417/417/417 416/416/416/416 +f 416/416/416/416 421/421/421/421 422/422/422/422 +f 379/379/379/379 418/418/418/418 419/419/419/419 +f 419/419/419/419 380/380/380/380 379/379/379/379 +f 383/383/383/383 420/420/420/420 418/418/418/418 +f 418/418/418/418 379/379/379/379 383/383/383/383 +f 385/385/385/385 421/421/421/421 420/420/420/420 +f 420/420/420/420 383/383/383/383 385/385/385/385 +f 387/387/387/387 422/422/422/422 421/421/421/421 +f 421/421/421/421 385/385/385/385 387/387/387/387 +f 423/423/423/423 424/424/424/424 387/387/387/387 +f 387/387/387/387 386/386/386/386 423/423/423/423 +f 425/425/425/425 426/426/426/426 424/424/424/424 +f 424/424/424/424 423/423/423/423 425/425/425/425 +f 427/427/427/427 428/428/428/428 426/426/426/426 +f 426/426/426/426 425/425/425/425 427/427/427/427 +f 429/429/429/429 430/430/430/430 428/428/428/428 +f 428/428/428/428 427/427/427/427 429/429/429/429 +f 431/431/431/431 423/423/423/423 386/386/386/386 +f 386/386/386/386 392/392/392/392 431/431/431/431 +f 432/432/432/432 425/425/425/425 423/423/423/423 +f 423/423/423/423 431/431/431/431 432/432/432/432 +f 433/433/433/433 427/427/427/427 425/425/425/425 +f 425/425/425/425 432/432/432/432 433/433/433/433 +f 434/434/434/434 429/429/429/429 427/427/427/427 +f 427/427/427/427 433/433/433/433 434/434/434/434 +f 435/435/435/435 431/431/431/431 392/392/392/392 +f 392/392/392/392 397/397/397/397 435/435/435/435 +f 436/436/436/436 432/432/432/432 431/431/431/431 +f 431/431/431/431 435/435/435/435 436/436/436/436 +f 437/437/437/437 433/433/433/433 432/432/432/432 +f 432/432/432/432 436/436/436/436 437/437/437/437 +f 438/438/438/438 434/434/434/434 433/433/433/433 +f 433/433/433/433 437/437/437/437 438/438/438/438 +f 439/439/439/439 435/435/435/435 397/397/397/397 +f 397/397/397/397 402/402/402/402 439/439/439/439 +f 440/440/440/440 436/436/436/436 435/435/435/435 +f 435/435/435/435 439/439/439/439 440/440/440/440 +f 441/441/441/441 437/437/437/437 436/436/436/436 +f 436/436/436/436 440/440/440/440 441/441/441/441 +f 442/442/442/442 438/438/438/438 437/437/437/437 +f 437/437/437/437 441/441/441/441 442/442/442/442 +f 443/443/443/443 444/444/444/444 412/412/412/412 +f 412/412/412/412 411/411/411/411 443/443/443/443 +f 445/445/445/445 446/446/446/446 444/444/444/444 +f 444/444/444/444 443/443/443/443 445/445/445/445 +f 447/447/447/447 448/448/448/448 446/446/446/446 +f 446/446/446/446 445/445/445/445 447/447/447/447 +f 449/449/449/449 450/450/450/450 448/448/448/448 +f 448/448/448/448 447/447/447/447 449/449/449/449 +f 451/451/451/451 443/443/443/443 411/411/411/411 +f 411/411/411/411 417/417/417/417 451/451/451/451 +f 452/452/452/452 445/445/445/445 443/443/443/443 +f 443/443/443/443 451/451/451/451 452/452/452/452 +f 453/453/453/453 447/447/447/447 445/445/445/445 +f 445/445/445/445 452/452/452/452 453/453/453/453 +f 454/454/454/454 449/449/449/449 447/447/447/447 +f 447/447/447/447 453/453/453/453 454/454/454/454 +f 455/455/455/455 451/451/451/451 417/417/417/417 +f 417/417/417/417 422/422/422/422 455/455/455/455 +f 456/456/456/456 452/452/452/452 451/451/451/451 +f 451/451/451/451 455/455/455/455 456/456/456/456 +f 457/457/457/457 453/453/453/453 452/452/452/452 +f 452/452/452/452 456/456/456/456 457/457/457/457 +f 458/458/458/458 454/454/454/454 453/453/453/453 +f 453/453/453/453 457/457/457/457 458/458/458/458 +f 424/424/424/424 455/455/455/455 422/422/422/422 +f 422/422/422/422 387/387/387/387 424/424/424/424 +f 426/426/426/426 456/456/456/456 455/455/455/455 +f 455/455/455/455 424/424/424/424 426/426/426/426 +f 428/428/428/428 457/457/457/457 456/456/456/456 +f 456/456/456/456 426/426/426/426 428/428/428/428 +f 430/430/430/430 458/458/458/458 457/457/457/457 +f 457/457/457/457 428/428/428/428 430/430/430/430 +f 459/459/459/459 460/460/460/460 461/461/461/461 +f 462/462/462/462 463/463/463/463 460/460/460/460 +f 460/460/460/460 459/459/459/459 462/462/462/462 +f 464/464/464/464 465/465/465/465 463/463/463/463 +f 463/463/463/463 462/462/462/462 464/464/464/464 +f 466/466/466/466 467/467/467/467 465/465/465/465 +f 465/465/465/465 464/464/464/464 466/466/466/466 +f 468/468/468/468 459/459/459/459 469/469/469/469 +f 470/470/470/470 462/462/462/462 459/459/459/459 +f 459/459/459/459 468/468/468/468 470/470/470/470 +f 471/471/471/471 464/464/464/464 462/462/462/462 +f 462/462/462/462 470/470/470/470 471/471/471/471 +f 472/472/472/472 466/466/466/466 464/464/464/464 +f 464/464/464/464 471/471/471/471 472/472/472/472 +f 473/473/473/473 468/468/468/468 474/474/474/474 +f 475/475/475/475 470/470/470/470 468/468/468/468 +f 468/468/468/468 473/473/473/473 475/475/475/475 +f 476/476/476/476 471/471/471/471 470/470/470/470 +f 470/470/470/470 475/475/475/475 476/476/476/476 +f 477/477/477/477 472/472/472/472 471/471/471/471 +f 471/471/471/471 476/476/476/476 477/477/477/477 +f 478/478/478/478 473/473/473/473 479/479/479/479 +f 480/480/480/480 475/475/475/475 473/473/473/473 +f 473/473/473/473 478/478/478/478 480/480/480/480 +f 481/481/481/481 476/476/476/476 475/475/475/475 +f 475/475/475/475 480/480/480/480 481/481/481/481 +f 482/482/482/482 477/477/477/477 476/476/476/476 +f 476/476/476/476 481/481/481/481 482/482/482/482 +f 483/483/483/483 478/478/478/478 484/484/484/484 +f 485/485/485/485 480/480/480/480 478/478/478/478 +f 478/478/478/478 483/483/483/483 485/485/485/485 +f 486/486/486/486 481/481/481/481 480/480/480/480 +f 480/480/480/480 485/485/485/485 486/486/486/486 +f 487/487/487/487 482/482/482/482 481/481/481/481 +f 481/481/481/481 486/486/486/486 487/487/487/487 +f 488/488/488/488 483/483/483/483 489/489/489/489 +f 490/490/490/490 485/485/485/485 483/483/483/483 +f 483/483/483/483 488/488/488/488 490/490/490/490 +f 491/491/491/491 486/486/486/486 485/485/485/485 +f 485/485/485/485 490/490/490/490 491/491/491/491 +f 492/492/492/492 487/487/487/487 486/486/486/486 +f 486/486/486/486 491/491/491/491 492/492/492/492 +f 493/493/493/493 488/488/488/488 494/494/494/494 +f 495/495/495/495 490/490/490/490 488/488/488/488 +f 488/488/488/488 493/493/493/493 495/495/495/495 +f 496/496/496/496 491/491/491/491 490/490/490/490 +f 490/490/490/490 495/495/495/495 496/496/496/496 +f 497/497/497/497 492/492/492/492 491/491/491/491 +f 491/491/491/491 496/496/496/496 497/497/497/497 +f 498/498/498/498 493/493/493/493 499/499/499/499 +f 500/500/500/500 495/495/495/495 493/493/493/493 +f 493/493/493/493 498/498/498/498 500/500/500/500 +f 501/501/501/501 496/496/496/496 495/495/495/495 +f 495/495/495/495 500/500/500/500 501/501/501/501 +f 502/502/502/502 497/497/497/497 496/496/496/496 +f 496/496/496/496 501/501/501/501 502/502/502/502 +f 503/503/503/503 504/504/504/504 461/461/461/461 +f 505/505/505/505 506/506/506/506 504/504/504/504 +f 504/504/504/504 503/503/503/503 505/505/505/505 +f 507/507/507/507 508/508/508/508 506/506/506/506 +f 506/506/506/506 505/505/505/505 507/507/507/507 +f 509/509/509/509 510/510/510/510 508/508/508/508 +f 508/508/508/508 507/507/507/507 509/509/509/509 +f 511/511/511/511 503/503/503/503 469/469/469/469 +f 512/512/512/512 505/505/505/505 503/503/503/503 +f 503/503/503/503 511/511/511/511 512/512/512/512 +f 513/513/513/513 507/507/507/507 505/505/505/505 +f 505/505/505/505 512/512/512/512 513/513/513/513 +f 514/514/514/514 509/509/509/509 507/507/507/507 +f 507/507/507/507 513/513/513/513 514/514/514/514 +f 515/515/515/515 511/511/511/511 474/474/474/474 +f 516/516/516/516 512/512/512/512 511/511/511/511 +f 511/511/511/511 515/515/515/515 516/516/516/516 +f 517/517/517/517 513/513/513/513 512/512/512/512 +f 512/512/512/512 516/516/516/516 517/517/517/517 +f 518/518/518/518 514/514/514/514 513/513/513/513 +f 513/513/513/513 517/517/517/517 518/518/518/518 +f 519/519/519/519 515/515/515/515 479/479/479/479 +f 520/520/520/520 516/516/516/516 515/515/515/515 +f 515/515/515/515 519/519/519/519 520/520/520/520 +f 521/521/521/521 517/517/517/517 516/516/516/516 +f 516/516/516/516 520/520/520/520 521/521/521/521 +f 522/522/522/522 518/518/518/518 517/517/517/517 +f 517/517/517/517 521/521/521/521 522/522/522/522 +f 523/523/523/523 519/519/519/519 484/484/484/484 +f 524/524/524/524 520/520/520/520 519/519/519/519 +f 519/519/519/519 523/523/523/523 524/524/524/524 +f 525/525/525/525 521/521/521/521 520/520/520/520 +f 520/520/520/520 524/524/524/524 525/525/525/525 +f 526/526/526/526 522/522/522/522 521/521/521/521 +f 521/521/521/521 525/525/525/525 526/526/526/526 +f 527/527/527/527 523/523/523/523 489/489/489/489 +f 528/528/528/528 524/524/524/524 523/523/523/523 +f 523/523/523/523 527/527/527/527 528/528/528/528 +f 529/529/529/529 525/525/525/525 524/524/524/524 +f 524/524/524/524 528/528/528/528 529/529/529/529 +f 530/530/530/530 526/526/526/526 525/525/525/525 +f 525/525/525/525 529/529/529/529 530/530/530/530 +f 531/531/531/531 527/527/527/527 494/494/494/494 +f 532/532/532/532 528/528/528/528 527/527/527/527 +f 527/527/527/527 531/531/531/531 532/532/532/532 +f 533/533/533/533 529/529/529/529 528/528/528/528 +f 528/528/528/528 532/532/532/532 533/533/533/533 +f 534/534/534/534 530/530/530/530 529/529/529/529 +f 529/529/529/529 533/533/533/533 534/534/534/534 +f 535/535/535/535 531/531/531/531 499/499/499/499 +f 536/536/536/536 532/532/532/532 531/531/531/531 +f 531/531/531/531 535/535/535/535 536/536/536/536 +f 537/537/537/537 533/533/533/533 532/532/532/532 +f 532/532/532/532 536/536/536/536 537/537/537/537 +f 538/538/538/538 534/534/534/534 533/533/533/533 +f 533/533/533/533 537/537/537/537 538/538/538/538 +f 539/539/539/539 540/540/540/540 541/541/541/541 +f 541/541/541/541 542/542/542/542 539/539/539/539 +f 543/543/543/543 544/544/544/544 540/540/540/540 +f 540/540/540/540 539/539/539/539 543/543/543/543 +f 545/545/545/545 546/546/546/546 544/544/544/544 +f 544/544/544/544 543/543/543/543 545/545/545/545 +f 547/547/547/547 548/548/548/548 546/546/546/546 +f 546/546/546/546 545/545/545/545 547/547/547/547 +f 549/549/549/549 539/539/539/539 542/542/542/542 +f 542/542/542/542 550/550/550/550 549/549/549/549 +f 551/551/551/551 543/543/543/543 539/539/539/539 +f 539/539/539/539 549/549/549/549 551/551/551/551 +f 552/552/552/552 545/545/545/545 543/543/543/543 +f 543/543/543/543 551/551/551/551 552/552/552/552 +f 553/553/553/553 547/547/547/547 545/545/545/545 +f 545/545/545/545 552/552/552/552 553/553/553/553 +f 554/554/554/554 549/549/549/549 550/550/550/550 +f 550/550/550/550 555/555/555/555 554/554/554/554 +f 556/556/556/556 551/551/551/551 549/549/549/549 +f 549/549/549/549 554/554/554/554 556/556/556/556 +f 557/557/557/557 552/552/552/552 551/551/551/551 +f 551/551/551/551 556/556/556/556 557/557/557/557 +f 558/558/558/558 553/553/553/553 552/552/552/552 +f 552/552/552/552 557/557/557/557 558/558/558/558 +f 559/559/559/559 554/554/554/554 555/555/555/555 +f 555/555/555/555 560/560/560/560 559/559/559/559 +f 561/561/561/561 556/556/556/556 554/554/554/554 +f 554/554/554/554 559/559/559/559 561/561/561/561 +f 562/562/562/562 557/557/557/557 556/556/556/556 +f 556/556/556/556 561/561/561/561 562/562/562/562 +f 563/563/563/563 558/558/558/558 557/557/557/557 +f 557/557/557/557 562/562/562/562 563/563/563/563 +f 564/564/564/564 559/559/559/559 560/560/560/560 +f 560/560/560/560 565/565/565/565 564/564/564/564 +f 566/566/566/566 561/561/561/561 559/559/559/559 +f 559/559/559/559 564/564/564/564 566/566/566/566 +f 567/567/567/567 562/562/562/562 561/561/561/561 +f 561/561/561/561 566/566/566/566 567/567/567/567 +f 568/568/568/568 563/563/563/563 562/562/562/562 +f 562/562/562/562 567/567/567/567 568/568/568/568 +f 569/569/569/569 564/564/564/564 565/565/565/565 +f 565/565/565/565 570/570/570/570 569/569/569/569 +f 571/571/571/571 566/566/566/566 564/564/564/564 +f 564/564/564/564 569/569/569/569 571/571/571/571 +f 572/572/572/572 567/567/567/567 566/566/566/566 +f 566/566/566/566 571/571/571/571 572/572/572/572 +f 573/573/573/573 568/568/568/568 567/567/567/567 +f 567/567/567/567 572/572/572/572 573/573/573/573 +f 574/574/574/574 569/569/569/569 570/570/570/570 +f 570/570/570/570 575/575/575/575 574/574/574/574 +f 576/576/576/576 571/571/571/571 569/569/569/569 +f 569/569/569/569 574/574/574/574 576/576/576/576 +f 577/577/577/577 572/572/572/572 571/571/571/571 +f 571/571/571/571 576/576/576/576 577/577/577/577 +f 578/578/578/578 573/573/573/573 572/572/572/572 +f 572/572/572/572 577/577/577/577 578/578/578/578 +f 579/579/579/579 574/574/574/574 575/575/575/575 +f 575/575/575/575 580/580/580/580 579/579/579/579 +f 581/581/581/581 576/576/576/576 574/574/574/574 +f 574/574/574/574 579/579/579/579 581/581/581/581 +f 582/582/582/582 577/577/577/577 576/576/576/576 +f 576/576/576/576 581/581/581/581 582/582/582/582 +f 583/583/583/583 578/578/578/578 577/577/577/577 +f 577/577/577/577 582/582/582/582 583/583/583/583 +f 584/584/584/584 585/585/585/585 586/586/586/586 +f 586/586/586/586 587/587/587/587 584/584/584/584 +f 588/588/588/588 589/589/589/589 585/585/585/585 +f 585/585/585/585 584/584/584/584 588/588/588/588 +f 590/590/590/590 591/591/591/591 589/589/589/589 +f 589/589/589/589 588/588/588/588 590/590/590/590 +f 592/592/592/592 593/593/593/593 591/591/591/591 +f 591/591/591/591 590/590/590/590 592/592/592/592 +f 594/594/594/594 584/584/584/584 587/587/587/587 +f 587/587/587/587 595/595/595/595 594/594/594/594 +f 596/596/596/596 588/588/588/588 584/584/584/584 +f 584/584/584/584 594/594/594/594 596/596/596/596 +f 597/597/597/597 590/590/590/590 588/588/588/588 +f 588/588/588/588 596/596/596/596 597/597/597/597 +f 598/598/598/598 592/592/592/592 590/590/590/590 +f 590/590/590/590 597/597/597/597 598/598/598/598 +f 599/599/599/599 594/594/594/594 595/595/595/595 +f 595/595/595/595 600/600/600/600 599/599/599/599 +f 601/601/601/601 596/596/596/596 594/594/594/594 +f 594/594/594/594 599/599/599/599 601/601/601/601 +f 602/602/602/602 597/597/597/597 596/596/596/596 +f 596/596/596/596 601/601/601/601 602/602/602/602 +f 603/603/603/603 598/598/598/598 597/597/597/597 +f 597/597/597/597 602/602/602/602 603/603/603/603 +f 604/604/604/604 599/599/599/599 600/600/600/600 +f 600/600/600/600 605/605/605/605 604/604/604/604 +f 606/606/606/606 601/601/601/601 599/599/599/599 +f 599/599/599/599 604/604/604/604 606/606/606/606 +f 607/607/607/607 602/602/602/602 601/601/601/601 +f 601/601/601/601 606/606/606/606 607/607/607/607 +f 608/608/608/608 603/603/603/603 602/602/602/602 +f 602/602/602/602 607/607/607/607 608/608/608/608 +f 609/609/609/609 604/604/604/604 605/605/605/605 +f 605/605/605/605 610/610/610/610 609/609/609/609 +f 611/611/611/611 606/606/606/606 604/604/604/604 +f 604/604/604/604 609/609/609/609 611/611/611/611 +f 612/612/612/612 607/607/607/607 606/606/606/606 +f 606/606/606/606 611/611/611/611 612/612/612/612 +f 613/613/613/613 608/608/608/608 607/607/607/607 +f 607/607/607/607 612/612/612/612 613/613/613/613 +f 614/614/614/614 609/609/609/609 610/610/610/610 +f 610/610/610/610 615/615/615/615 614/614/614/614 +f 616/616/616/616 611/611/611/611 609/609/609/609 +f 609/609/609/609 614/614/614/614 616/616/616/616 +f 617/617/617/617 612/612/612/612 611/611/611/611 +f 611/611/611/611 616/616/616/616 617/617/617/617 +f 618/618/618/618 613/613/613/613 612/612/612/612 +f 612/612/612/612 617/617/617/617 618/618/618/618 +f 619/619/619/619 614/614/614/614 615/615/615/615 +f 615/615/615/615 620/620/620/620 619/619/619/619 +f 621/621/621/621 616/616/616/616 614/614/614/614 +f 614/614/614/614 619/619/619/619 621/621/621/621 +f 622/622/622/622 617/617/617/617 616/616/616/616 +f 616/616/616/616 621/621/621/621 622/622/622/622 +f 623/623/623/623 618/618/618/618 617/617/617/617 +f 617/617/617/617 622/622/622/622 623/623/623/623 +f 624/624/624/624 619/619/619/619 620/620/620/620 +f 620/620/620/620 625/625/625/625 624/624/624/624 +f 626/626/626/626 621/621/621/621 619/619/619/619 +f 619/619/619/619 624/624/624/624 626/626/626/626 +f 627/627/627/627 622/622/622/622 621/621/621/621 +f 621/621/621/621 626/626/626/626 627/627/627/627 +f 628/628/628/628 623/623/623/623 622/622/622/622 +f 622/622/622/622 627/627/627/627 628/628/628/628 diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj.meta new file mode 100644 index 0000000..1c54db1 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj.meta @@ -0,0 +1,83 @@ +fileFormatVersion: 2 +guid: dacaee67ec5e14226b9ec02527c457b5 +timeCreated: 1465591475 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: Cube_Instance_0 + 100002: //RootNode + 100004: Teapot001_Instance_0 + 400000: Cube_Instance_0 + 400002: //RootNode + 400004: Teapot001_Instance_0 + 2300000: Cube_Instance_0 + 2300002: Teapot001_Instance_0 + 3300000: Cube_Instance_0 + 3300002: Teapot001_Instance_0 + 4300000: Cube_Instance_0 + 4300002: Teapot001_Instance_0 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleRotations: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes.meta new file mode 100644 index 0000000..287e808 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: de90c25035683439686941d132beb13c +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity new file mode 100644 index 0000000000000000000000000000000000000000..156264d29e19d85b0923324fbe0e7988e04d5ff9 GIT binary patch literal 18064 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 USN{0?zB^vO`ZwB_+)K)T13r*o-2eap literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta new file mode 100644 index 0000000..30497ae --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 8573b7b1c7256de4896b3054d17de1b7 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts.meta new file mode 100644 index 0000000..7115e66 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 960be3fc0da534863bcaece34b55fe5b +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs new file mode 100644 index 0000000..070deb0 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs @@ -0,0 +1,52 @@ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +using Random = UnityEngine.Random; + +[RequireComponent(typeof(MeshFilter))] +public class Example : MonoBehaviour +{ + //------------------------------------------------------------------------------------------------------------ + private const string INPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot.obj"; + private const string OUTPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj"; + + //------------------------------------------------------------------------------------------------------------ + private void Start() + { + // Load the OBJ in + var lStream = new FileStream(INPUT_PATH, FileMode.Open); + var lOBJData = OBJLoader.LoadOBJ(lStream); + var lMeshFilter = GetComponent(); + lMeshFilter.mesh.LoadOBJ(lOBJData); + lStream.Close(); + + lStream = null; + lOBJData = null; + + // Wiggle Vertices in Mesh + /* + var lVertices = lMeshFilter.mesh.vertices; + for (int lCount = 0; lCount < lVertices.Length; ++lCount) + { + lVertices[lCount] = lVertices[lCount] + Vector3.up * Mathf.Sin(lVertices[lCount].x) * 4f; + } + lMeshFilter.mesh.vertices = lVertices; +*/ + // Export the new Wiggled Mesh + if (File.Exists(OUTPUT_PATH)) + { + File.Delete(OUTPUT_PATH); + } + lStream = new FileStream(OUTPUT_PATH, FileMode.Create); + lOBJData = lMeshFilter.mesh.EncodeOBJ(); + OBJLoader.ExportOBJ(lOBJData, lStream); + lStream.Close(); + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta new file mode 100644 index 0000000..2f53ad0 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f3ab7cfdf40b84b41a7adc35c545c226 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins.meta new file mode 100644 index 0000000..4756c3f --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a34eacd8a28f549b4afede06cd79972e +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension.meta new file mode 100644 index 0000000..10583cd --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 222144ab5ea5b4732b84d8eff5735d91 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs new file mode 100644 index 0000000..90e5591 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs @@ -0,0 +1,112 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + public static class GameObjectExt + { + //------------------------------------------------------------------------------------------------------------ + public static T GetOrAddComponent(this GameObject lGo) where T : Component + { + T lComponent = lGo.GetComponent(); + if (lComponent == null) + { + lComponent = lGo.gameObject.AddComponent(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static T GetComponentOfChild(this GameObject lGo, string lName) where T : Component + { + T lComponent = null; + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + lComponent = lTransform.GetComponent(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static T[] GetComponentsOfChild(this GameObject lGo, string lName) where T : Component + { + T[] lComponent = null; + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + lComponent = lTransform.GetComponents(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static GameObject InstantiateAsChild(this GameObject lGo, GameObject lObject) + { + GameObject lNewGo = lObject != null ? (GameObject)GameObject.Instantiate(lObject) : new GameObject(); + lNewGo.transform.parent = lGo.transform; + lNewGo.transform.localPosition = Vector3.zero; + lNewGo.transform.localRotation = Quaternion.identity; + lNewGo.transform.localScale = Vector3.one; + return lNewGo; + } + + //------------------------------------------------------------------------------------------------------------ + public static bool DestroyChildIfExists(this GameObject lGo, string lName) + { + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + GameObject.Destroy(lTransform.gameObject); + return true; + } + else + { + return false; + } + } + + //------------------------------------------------------------------------------------------------------------ + public static bool ContainsChildren(this GameObject lGo, params string[] lPaths) + { + for (int lCount = 0; lCount < lPaths.Length; ++lCount) + { + if (lGo.transform.FindChild(lPaths[lCount]) == null) + { + return false; + } + } + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsChildOf(this GameObject lGo, GameObject lParent) + { + Transform lTransform = lGo.transform; + while (lTransform.parent != null) + { + if (lTransform == lParent.transform) + { + return true; + } + lTransform = lTransform.parent; + } + return false; + } + + //------------------------------------------------------------------------------------------------------------ + public static void SetLayerRecursively(this GameObject lGo, int lLayer) + { + lGo.layer = lLayer; + foreach (Transform lTransform in lGo.transform) + { + lTransform.gameObject.SetLayerRecursively(lLayer); + } + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta new file mode 100644 index 0000000..db440fc --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 35b132c59c7910c4b99e560a0f9baf95 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs new file mode 100644 index 0000000..0714e27 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs @@ -0,0 +1,627 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +using UnityEngine; + +namespace UnityExtension +{ + public static class MeshExt + { + //------------------------------------------------------------------------------------------------------------ + public static void RecalculateTangents(this Mesh lMesh) + { + //speed up math by copying the mesh arrays + int[] triangles = lMesh.triangles; + Vector3[] vertices = lMesh.vertices; + Vector2[] uv = lMesh.uv; + Vector3[] normals = lMesh.normals; + + //variable definitions + int triangleCount = triangles.Length; + int vertexCount = vertices.Length; + + Vector3[] tan1 = new Vector3[vertexCount]; + Vector3[] tan2 = new Vector3[vertexCount]; + + Vector4[] tangents = new Vector4[vertexCount]; + + for (long a = 0; a < triangleCount; a += 3) + { + long i1 = triangles[a + 0]; + long i2 = triangles[a + 1]; + long i3 = triangles[a + 2]; + + Vector3 v1 = vertices[i1]; + Vector3 v2 = vertices[i2]; + Vector3 v3 = vertices[i3]; + + Vector2 w1 = uv[i1]; + Vector2 w2 = uv[i2]; + Vector2 w3 = uv[i3]; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + float z1 = v2.z - v1.z; + float z2 = v3.z - v1.z; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float r = 1.0f / (s1 * t2 - s2 * t1); + + Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + tan1[i1] += sdir; + tan1[i2] += sdir; + tan1[i3] += sdir; + + tan2[i1] += tdir; + tan2[i2] += tdir; + tan2[i3] += tdir; + } + + + for (long a = 0; a < vertexCount; ++a) + { + Vector3 n = normals[a]; + Vector3 t = tan1[a]; + + //Vector3 tmp = (t - n * Vector3.Dot(n, t)).normalized; + //tangents[a] = new Vector4(tmp.x, tmp.y, tmp.z); + Vector3.OrthoNormalize(ref n, ref t); + tangents[a].x = t.x; + tangents[a].y = t.y; + tangents[a].z = t.z; + + tangents[a].w = (Vector3.Dot(Vector3.Cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f; + } + + lMesh.tangents = tangents; + } + + //------------------------------------------------------------------------------------------------------------ + public static void LoadOBJ(this Mesh lMesh, OBJData lData) + { + List lVertices = new List(); + List lNormals = new List(); + List lUVs = new List(); + List[] lIndices = new List[lData.m_Groups.Count]; + Dictionary lVertexIndexRemap = new Dictionary(); + bool lHasNormals = lData.m_Normals.Count > 0; + bool lHasUVs = lData.m_UVs.Count > 0; + + lMesh.subMeshCount = lData.m_Groups.Count; + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) + { + OBJGroup lGroup = lData.m_Groups[lGCount]; + lIndices[lGCount] = new List(); + + for (int lFCount = 0; lFCount < lGroup.Faces.Count; ++lFCount) + { + OBJFace lFace = lGroup.Faces[lFCount]; + + // Unity3d doesn't support non-triangle faces + // so we do simple fan triangulation + for (int lVCount = 1; lVCount < lFace.Count - 1; ++lVCount) + { + foreach (int i in new int[]{0, lVCount, lVCount + 1}) + { + OBJFaceVertex lFaceVertex = lFace[i]; + int lVertexIndex = -1; + + if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { + lVertexIndexRemap[lFaceVertex] = lVertices.Count; + lVertexIndex = lVertices.Count; + + lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); + if (lHasUVs) + { + lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); + } + if (lHasNormals) + { + lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); + } + } + + lIndices[lGCount].Add(lVertexIndex); + } + } + } + } + + lMesh.triangles = new int[]{ }; + lMesh.vertices = lVertices.ToArray(); + lMesh.uv = lUVs.ToArray(); + lMesh.normals = lNormals.ToArray(); + if (!lHasNormals) + { + lMesh.RecalculateNormals(); + } + + lMesh.RecalculateTangents(); + + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) + { + lMesh.SetTriangles(lIndices[lGCount].ToArray(), lGCount); + } + } + + //------------------------------------------------------------------------------------------------------------ + public static OBJData EncodeOBJ(this Mesh lMesh) + { + OBJData lData = new OBJData + { + m_Vertices = new List(lMesh.vertices), + m_UVs = new List(lMesh.uv), + m_Normals = new List(lMesh.normals), + m_UV2s = new List(lMesh.uv2), + m_Colors = new List(lMesh.colors) + }; + + int[] lIndices = null; + OBJGroup lGroup = null; + OBJFace lFace = null; + OBJFaceVertex lFaceVertex = null; + + for (int lMCount = 0; lMCount < lMesh.subMeshCount; ++lMCount) + { + lIndices = lMesh.GetTriangles(lMCount); + lGroup = new OBJGroup(lMesh.name + "_" + lMCount.ToString()); + + for (int lCount = 0; lCount < lIndices.Length; lCount += 3) + { + lFace = new OBJFace(); + + lFaceVertex = new OBJFaceVertex(); + lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount] : -1; + lFace.AddVertex(lFaceVertex); + + lFaceVertex = new OBJFaceVertex(); + lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 1] : -1; + lFace.AddVertex(lFaceVertex); + + lFaceVertex = new OBJFaceVertex(); + lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 2] : -1; + lFace.AddVertex(lFaceVertex); + + lGroup.AddFace(lFace); + } + + lData.m_Groups.Add(lGroup); + } + + return lData; + } + + //------------------------------------------------------------------------------------------------------------ + internal const int MESH_BINARY_HEADER_SIZE = 20; + internal const short MESH_BINARY_SIGNATURE = 0xF5; + internal const short MESH_BINARY_VERSION = 1; + + //------------------------------------------------------------------------------------------------------------ + public static bool LoadBinary(this Mesh lMesh, byte[] lData) + { + int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); + int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); + int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); + int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); + int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); + int lSizeOfColor = Marshal.SizeOf(typeof(Color)); + + int lDataOffset = MESH_BINARY_HEADER_SIZE; + int lDeltaOffset = 0; + + if (lData == null || + lData.Length < MESH_BINARY_HEADER_SIZE) + { + return false; + } + + // Header + short lSignature = BitConverter.ToInt16(lData, 0); + short lVersion = BitConverter.ToInt16(lData, 2); + + if (lSignature != MESH_BINARY_SIGNATURE || + lVersion != MESH_BINARY_VERSION) + { + return false; + } + + lMesh.Clear(); + + int lVertexCount = BitConverter.ToInt32(lData, 4); + int lIndexCount = BitConverter.ToInt32(lData, 8); + int lSubMeshCount = BitConverter.ToInt32(lData, 12); + + byte lFlags = lData[16]; + + bool lUVFlag = (lFlags & 1) > 0; + bool lUV1Flag = (lFlags & 2) > 0; + bool lUV2Flag = (lFlags & 4) > 0; + bool lNormalFlag = (lFlags & 8) > 0; + bool lTangentFlag = (lFlags & 16) > 0; + bool lColorFlag = (lFlags & 32) > 0; + bool lBindPoseFlag = (lFlags & 64) > 0; + bool lBoneWeightFlag = (lFlags & 128) > 0; + + // Vertices + Vector3[] lVertices = new Vector3[lVertexCount]; + lDeltaOffset = lVertices.Length * lSizeOfVector3; + GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.vertices = lVertices; + lVertices = null; + + // UV Channel 0 + Vector2[] lUVs = null; + if (lUVFlag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv = lUVs; + Debug.Log("UV Count : " + lUVs.Length); + lUVs = null; + } + + // UV Channel 1 + if (lUV1Flag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv2 = lUVs; + Debug.Log("UV1 Count : " + lUVs.Length); + lUVs = null; + } + + // UV Channel 2 + if (lUV2Flag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv2 = lUVs; + Debug.Log("UV2 Count : " + lUVs.Length); + lUVs = null; + } + + // Normals + if (lNormalFlag == true) + { + Vector3[] lNormals = new Vector3[lVertexCount]; + lDeltaOffset = lNormals.Length * lSizeOfVector3; + lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.normals = lNormals; + Debug.Log("Normal Count : " + lNormals.Length); + lNormals = null; + } + + // Tangents + if (lTangentFlag == true) + { + Vector4[] lTangents = new Vector4[lVertexCount]; + lDeltaOffset = lTangents.Length * lSizeOfVector4; + lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.tangents = lTangents; + Debug.Log("Tangents Count : " + lTangents.Length); + lTangents = null; + } + + // Colors + if (lColorFlag == true) + { + Color[] lColors = new Color[lVertexCount]; + lDeltaOffset = lColors.Length * lSizeOfColor; + lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.colors = lColors; + lColors = null; + } + + // Bind Poses + if (lBindPoseFlag == true) + { + Matrix4x4[] lBindPoses = new Matrix4x4[lVertexCount]; + lDeltaOffset = lBindPoses.Length * lSizeOfMatrix4x4; + lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.bindposes = lBindPoses; + lBindPoses = null; + } + + // Bone Weights + if (lBoneWeightFlag == true) + { + BoneWeight[] lBoneWeight = new BoneWeight[lVertexCount]; + lDeltaOffset = lBoneWeight.Length * lSizeOfBoneWeight; + lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.boneWeights = lBoneWeight; + lBoneWeight = null; + } + + // Indices + int[] lIndices = new int[lIndexCount]; + lDeltaOffset = lIndices.Length * sizeof(int); + Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); + lDataOffset += lDeltaOffset; + lMesh.triangles = lIndices; + lIndices = null; + + // SubMesh Indices + for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) + { + int lSubMeshIndexCount = BitConverter.ToInt32(lData, lDataOffset); + lDataOffset += sizeof(int); + + lIndices = new int[lSubMeshIndexCount]; + lDeltaOffset = lIndices.Length * sizeof(int); + Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); + lDataOffset += lDeltaOffset; + + if (lIndices.Length > 0 && + lIndices.Length % 3 == 0) + { + lMesh.SetTriangles(lIndices, lSubMeshIndex); + } + + lIndices = null; + } + + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static byte[] EncodeBinary(this Mesh lMesh) + { + // Currently no support for BlendShape + + int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); + int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); + int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); + int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); + int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); + int lSizeOfColor = Marshal.SizeOf(typeof(Color)); + + int lDataSize = MESH_BINARY_HEADER_SIZE; + int lDeltaSize = 0; + + bool lUVFlag = false, lUV1Flag = false, lUV2Flag = false, + lNormalFlag = false, lTangentFlag = false, lColorFlag = false, + lBindPoseFlag = false, lBoneWeightFlag = false; + + byte[] lData = new byte[lDataSize]; + + // Vertices + Vector3[] lVertices = lMesh.vertices; + Int32Converter lVertexCount = lVertices.Length; + lDeltaSize = lVertices.Length * lSizeOfVector3; + Array.Resize(ref lData, lDataSize + lDeltaSize); + GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + lVertices = null; + + // UV Channel 0 + Vector2[] lUVs = lMesh.uv; + if (lUVs.Length > 0) + { + lUVFlag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // UV Channel 1 + lUVs = lMesh.uv2; + if (lUVs.Length > 0) + { + lUV1Flag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // UV Channel 2 + lUVs = lMesh.uv2; + if (lUVs.Length > 0) + { + lUV2Flag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // Normals + Vector3[] lNormals = lMesh.normals; + if (lNormals.Length > 0) + { + lNormalFlag = true; + lDeltaSize = lNormals.Length * lSizeOfVector3; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lNormals = null; + + // Tangents + Vector4[] lTangents = lMesh.tangents; + if (lTangents.Length > 0) + { + lTangentFlag = true; + lDeltaSize = lTangents.Length * lSizeOfVector4; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lTangents = null; + + // Colors + Color[] lColors = lMesh.colors; + if (lColors.Length > 0) + { + lColorFlag = true; + lDeltaSize = lColors.Length * lSizeOfColor; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lColors = null; + + // BindPoses + Matrix4x4[] lBindPoses = lMesh.bindposes; + if (lBindPoses.Length > 0) + { + lBindPoseFlag = true; + lDeltaSize = lBindPoses.Length * lSizeOfMatrix4x4; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lBindPoses = null; + + // BoneWeight + BoneWeight[] lBoneWeight = lMesh.boneWeights; + if (lBoneWeight.Length > 0) + { + lBoneWeightFlag = true; + lDeltaSize = lBoneWeight.Length * lSizeOfBoneWeight; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lBoneWeight = null; + + // Indices + int[] lIndices = lMesh.triangles; + Int32Converter lIndexCount = lIndices.Length; + lDeltaSize = lIndices.Length * sizeof(int); + Array.Resize(ref lData, lDataSize + lDeltaSize); + Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize); + lDataSize += lDeltaSize; + lIndices = null; + + // SubMesh Indices + Int32Converter lSubMeshCount = lMesh.subMeshCount; + for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) + { + lIndices = lMesh.GetTriangles(lSubMeshIndex); + + Int32Converter lSubMeshIndexCount = lIndices.Length; + + lDeltaSize = sizeof(int) + (lIndices.Length * sizeof(int)); + Array.Resize(ref lData, lDataSize + lDeltaSize); + + lData[lDataSize + 0] = lSubMeshIndexCount.Byte1; + lData[lDataSize + 1] = lSubMeshIndexCount.Byte2; + lData[lDataSize + 2] = lSubMeshIndexCount.Byte3; + lData[lDataSize + 3] = lSubMeshIndexCount.Byte4; + + Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize - sizeof(int)); + lDataSize += lDeltaSize; + } + + // Header + lData[0] = (byte)(MESH_BINARY_SIGNATURE & 0xFF); + lData[1] = (byte)((MESH_BINARY_SIGNATURE >> 8) & 0xFF); + + lData[2] = (byte)(MESH_BINARY_VERSION & 0xFF); + lData[3] = (byte)((MESH_BINARY_VERSION >> 8) & 0xFF); + + lData[4] = lVertexCount.Byte1; + lData[5] = lVertexCount.Byte2; + lData[6] = lVertexCount.Byte3; + lData[7] = lVertexCount.Byte4; + + lData[8] = lIndexCount.Byte1; + lData[9] = lIndexCount.Byte2; + lData[10] = lIndexCount.Byte3; + lData[11] = lIndexCount.Byte4; + + lData[12] = lSubMeshCount.Byte1; + lData[13] = lSubMeshCount.Byte2; + lData[14] = lSubMeshCount.Byte3; + lData[15] = lSubMeshCount.Byte4; + + lData[16] = (byte)( + (lUVFlag ? 1 : 0) | + (lUV1Flag ? 2 : 0) | + (lUV2Flag ? 4 : 0) | + (lNormalFlag ? 8 : 0) | + (lTangentFlag ? 16 : 0) | + (lColorFlag ? 32 : 0) | + (lBindPoseFlag ? 64 : 0) | + (lBoneWeightFlag ? 128 : 0)); + + return lData; + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta new file mode 100644 index 0000000..49a47a8 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a643d266ae55c8845ac48528640b7e8e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs new file mode 100644 index 0000000..9c9b2bc --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs @@ -0,0 +1,43 @@ + +using System; +using System.Globalization; + +public static class StringExt +{ + //------------------------------------------------------------------------------------------------------------ + public static float ParseInvariantFloat(this string floatString) + { + return float.Parse(floatString, CultureInfo.InvariantCulture.NumberFormat); + } + + //------------------------------------------------------------------------------------------------------------ + public static int ParseInvariantInt(this string intString) + { + return int.Parse(intString, CultureInfo.InvariantCulture.NumberFormat); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool EqualsInvariantCultureIgnoreCase(this string str, string s) + { + return str.Equals(s, StringComparison.InvariantCultureIgnoreCase); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsNullOrEmpty(this string str) + { + return string.IsNullOrEmpty(str); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsNullOrWhiteSpace(string value) + { + if (value == null) + return true; + for (int index = 0; index < value.Length; ++index) + { + if (!char.IsWhiteSpace(value[index])) + return false; + } + return true; + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta new file mode 100644 index 0000000..d3720b0 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5403d11ff2ec0124a9a20522559dfcfa +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs new file mode 100644 index 0000000..6648b22 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs @@ -0,0 +1,55 @@ + +using System; +using System.IO; +using System.Collections.Generic; + +using UnityEngine; + +namespace UnityExtension +{ + public static class Texture2DExt + { + //------------------------------------------------------------------------------------------------------------ + public static byte[] EncodeToTGA(this Texture2D lTexture) + { + MemoryStream lDataStream = new MemoryStream(18 + (lTexture.width * lTexture.height * 3)); + BinaryWriter lDataWriter = new BinaryWriter(lDataStream); + + if (lDataWriter != null) + { + lDataWriter.Write((short)0); + lDataWriter.Write((byte)2); + lDataWriter.Write((int)0); + lDataWriter.Write((int)0); + lDataWriter.Write((byte)0); + lDataWriter.Write((short)lTexture.width); + lDataWriter.Write((short)lTexture.height); + lDataWriter.Write((byte)24); + lDataWriter.Write((byte)0); + + Color32[] lPixelData = lTexture.GetPixels32(); + for (int lCount = 0; lCount < lPixelData.Length; ++lCount) + { + lDataWriter.Write(lPixelData[lCount].b); + lDataWriter.Write(lPixelData[lCount].g); + lDataWriter.Write(lPixelData[lCount].r); + } + } + + return lDataStream.GetBuffer(); + } + + //------------------------------------------------------------------------------------------------------------ + public static void ConvertLightmapToMobile(this Texture2D lTexture) + { + Color[] lColorData = lTexture.GetPixels(); + for (int lCount = 0; lCount < lColorData.Length; ++lCount) + { + lColorData[lCount] = (lColorData[lCount] * (8f * lColorData[lCount].a)) * 0.5f; + } + lTexture.SetPixels(lColorData); + lTexture.Apply(); + lColorData = null; + } + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta new file mode 100644 index 0000000..3e17a53 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9260066d99f960241b2a222401bcb685 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs new file mode 100644 index 0000000..1da3491 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs @@ -0,0 +1,28 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + public static class TransformExt + { + //------------------------------------------------------------------------------------------------------------ + public static void LocalReset(this Transform lTransform) + { + lTransform.localPosition = Vector3.zero; + lTransform.localRotation = Quaternion.identity; + lTransform.localScale = Vector3.one; + } + + //------------------------------------------------------------------------------------------------------------ + public static void Align(this Transform lTransform, Transform lTarget) + { + lTransform.position = lTarget.position; + lTransform.rotation = lTarget.rotation; + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta new file mode 100644 index 0000000..50e2c33 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a8e76b9c1894ec743ae076720e775f49 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs new file mode 100644 index 0000000..9c49373 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs @@ -0,0 +1,239 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + //------------------------------------------------------------------------------------------------------------ + public static class Utils + { + //------------------------------------------------------------------------------------------------------------ + public static bool HasKeys(Dictionary lData, params string[] lKeys) + { + if (lKeys != null) + { + for (int lCount = 0; lCount < lKeys.Length; ++lCount) + { + if (!lData.ContainsKey(lKeys[lCount])) + { + return false; + } + } + } + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static void ClearChildren(GameObject lGo, string lTarget) + { + if (lGo != null) + { + Transform lTransform = null; + for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) + { + lTransform = lGo.transform.GetChild(lCount); + if (lTransform.name.Contains(lTarget)) + { + lTransform.parent = null; + GameObject.Destroy(lTransform.gameObject); + } + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static void ClearChildrenRegex(GameObject lGo, string lPattern) + { + if (lGo != null) + { + Transform lTransform = null; + Regex lRegex = new Regex(lPattern); + for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) + { + lTransform = lGo.transform.GetChild(lCount); + if (lRegex.IsMatch(lTransform.name)) + { + lTransform.parent = null; + GameObject.Destroy(lTransform.gameObject); + } + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static void VerifyObjects(string lMsg, params object[] lObjects) + { + for (int lCount = 0; lCount < lObjects.Length; ++lCount) + { + if (lObjects[lCount] == null) + { + Debug.LogError(lMsg); + break; + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static bool JSONCheck(string lText) + { + return !string.IsNullOrEmpty(lText) && lText[0] == '{'; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector3 ParseVector3Json(string lJsonData) + { + string[] lVector3Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Vector3 lVector3 = Vector3.zero; + + if (float.TryParse(lVector3Array[0], out lVector3.x) == false) + { + return Vector3.zero; + } + if (float.TryParse(lVector3Array[1], out lVector3.y) == false) + { + return Vector3.zero; + } + if (float.TryParse(lVector3Array[2], out lVector3.z) == false) + { + return Vector3.zero; + } + + return lVector3; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector4 ParseVector4Json(string lJsonData) + { + string[] lVector4Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Vector4 lVector4 = Vector4.zero; + + if (float.TryParse(lVector4Array[0], out lVector4.x) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[1], out lVector4.y) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[2], out lVector4.z) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[3], out lVector4.w) == false) + { + return Vector4.zero; + } + + return lVector4; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector2 ParseVector2String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + + return new Vector2(lX, lY); + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector3 ParseVector3String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + float lZ = lParts[2].ParseInvariantFloat(); + + return new Vector3(lX, lY, lZ); + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector4 ParseVector4String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + float lZ = lParts[2].ParseInvariantFloat(); + float lW = lParts[3].ParseInvariantFloat(); + + return new Vector4(lX, lY, lZ, lW); + } + + //------------------------------------------------------------------------------------------------------------ + public static Quaternion ParseQuaternion(string lJsonData) + { + string[] lQuaternionArray = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Quaternion lQuaternion = Quaternion.identity; + + if (float.TryParse(lQuaternionArray[0], out lQuaternion.x) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[1], out lQuaternion.y) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[2], out lQuaternion.z) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[3], out lQuaternion.w) == false) + { + return Quaternion.identity; + } + + return lQuaternion; + } + + //------------------------------------------------------------------------------------------------------------ + public static string Vector3String(Vector3 lVector3) + { + return "(" + + lVector3.x.ToString("f3") + "," + + lVector3.y.ToString("f3") + "," + + lVector3.z.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static string Vector4String(Vector4 lVector4) + { + return "(" + + lVector4.x.ToString("f3") + "," + + lVector4.y.ToString("f3") + "," + + lVector4.z.ToString("f3") + "," + + lVector4.w.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static string QuaternionString(Quaternion lQuaternion) + { + return "(" + + lQuaternion.x.ToString("f3") + "," + + lQuaternion.y.ToString("f3") + "," + + lQuaternion.z.ToString("f3") + "," + + lQuaternion.w.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static int FirstInt(string lJsonData) + { + string lDigits = ""; + for (int lCount = 0; lCount < lJsonData.Length && Char.IsDigit(lJsonData[lCount]); ++lCount) + { + lDigits += lJsonData[lCount]; + } + return int.Parse(lDigits); + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta new file mode 100644 index 0000000..9a9c9d3 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 06a010ef6a1e94840a51827a2a02badc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs new file mode 100644 index 0000000..9e6ddbd --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs @@ -0,0 +1,35 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + //------------------------------------------------------------------------------------------------------------ + public static class Vector3Ext + { + //------------------------------------------------------------------------------------------------------------ + public static readonly Vector3 IgnoreX = new Vector3(0f, 1f, 1f); + public static readonly Vector3 IgnoreY = new Vector3(1f, 0f, 1f); + public static readonly Vector3 IgnoreZ = new Vector3(1f, 1f, 0f); + + //------------------------------------------------------------------------------------------------------------ + public static Color ToColor(this Vector3 lVector) + { + return new Color(lVector.x, lVector.y, lVector.z); + } + } + + //------------------------------------------------------------------------------------------------------------ + public static class Vector4Ext + { + //------------------------------------------------------------------------------------------------------------ + public static Color ToColor(this Vector4 lVector) + { + return new Color(lVector.x, lVector.y, lVector.z, lVector.w); + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta new file mode 100644 index 0000000..89d8c8e --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 18a26dda21abdf5468d5731a6dbd26c4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta new file mode 100644 index 0000000..48409ba --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 398bd6d854d804239926cbd17c9ee93c +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta new file mode 100644 index 0000000..e87c22f --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8700a9474fed74e75b15b31742f639e2 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs new file mode 100644 index 0000000..239a519 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs @@ -0,0 +1,18 @@ + +using System.Collections.Generic; + +using UnityEngine; + +public class OBJData +{ + //------------------------------------------------------------------------------------------------------------ + public List m_Vertices = new List(); + public List m_Normals = new List(); + public List m_UVs = new List(); + public List m_UV2s = new List(); + public List m_Colors = new List(); + + //------------------------------------------------------------------------------------------------------------ + public List m_Materials = new List(); + public List m_Groups = new List(); +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta new file mode 100644 index 0000000..30be016 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5c57f7fdab36a3f4d9d97f4785a884f6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs new file mode 100644 index 0000000..ac8f61d --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs @@ -0,0 +1,101 @@ + +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +public class OBJFace +{ + //------------------------------------------------------------------------------------------------------------ + private readonly List m_Vertices = new List(); + + //------------------------------------------------------------------------------------------------------------ + public void AddVertex(OBJFaceVertex lVertex) + { + m_Vertices.Add(lVertex); + } + + //------------------------------------------------------------------------------------------------------------ + public void ParseVertex(string lVertexString) + { + var fields = lVertexString.Split(new[] { '/' }, StringSplitOptions.None); + + var lIndex = fields[0].ParseInvariantInt(); + var faceVertex = new OBJFaceVertex + { + m_VertexIndex = lIndex - 1 + }; + + if (fields.Length > 1) + { + lIndex = fields[1].Length == 0 ? 0 : fields[1].ParseInvariantInt(); + faceVertex.m_UVIndex = lIndex - 1; + } + + if (fields.Length > 2) + { + lIndex = fields[2].Length == 0 ? 0 : fields[2].ParseInvariantInt(); + faceVertex.m_NormalIndex = lIndex - 1; + } + + if (fields.Length > 3) + { + lIndex = fields[3].Length == 0 ? 0 : fields[3].ParseInvariantInt(); + faceVertex.m_UV2Index = lIndex - 1; + } + + if (fields.Length > 4) + { + lIndex = fields[4].Length == 0 ? 0 : fields[4].ParseInvariantInt(); + faceVertex.m_ColorIndex = lIndex - 1; + } + + AddVertex(faceVertex); + } + + //------------------------------------------------------------------------------------------------------------ + public string ToString(int lIndex) + { + OBJFaceVertex lFaceVertex = m_Vertices[lIndex]; + + string lOutput = (lFaceVertex.m_VertexIndex + 1).ToString(); + + if (lFaceVertex.m_UVIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_UVIndex + 1).ToString()); + } + + if (lFaceVertex.m_NormalIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_NormalIndex + 1).ToString()); + } + + if (lFaceVertex.m_UV2Index > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_UV2Index + 1).ToString()); + } + + if (lFaceVertex.m_ColorIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_ColorIndex + 1).ToString()); + } + + return lOutput; + } + + //------------------------------------------------------------------------------------------------------------ + public OBJFaceVertex this[int i] + { + get { return m_Vertices[i]; } + } + + //------------------------------------------------------------------------------------------------------------ + public int Count + { + get { return m_Vertices.Count; } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta new file mode 100644 index 0000000..9489fb2 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 07402f6cbfe2d0e40ab4d7363cb0ed64 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs new file mode 100644 index 0000000..47e52fb --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs @@ -0,0 +1,25 @@ + +public class OBJFaceVertex +{ + //------------------------------------------------------------------------------------------------------------ + public int m_VertexIndex = -1; + public int m_UVIndex = -1; + public int m_UV2Index = -1; + public int m_NormalIndex = -1; + public int m_ColorIndex = -1; + + public override int GetHashCode() + { + return m_VertexIndex ^ m_UVIndex ^ m_UV2Index ^ m_NormalIndex ^ m_ColorIndex; + } + + public override bool Equals(object obj) + { + OBJFaceVertex faceVertex = (OBJFaceVertex)obj; + return m_VertexIndex == faceVertex.m_VertexIndex + && m_UVIndex == faceVertex.m_UVIndex + && m_UV2Index == faceVertex.m_UV2Index + && m_NormalIndex == faceVertex.m_NormalIndex + && m_ColorIndex == m_ColorIndex; + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta new file mode 100644 index 0000000..e099066 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1f5cff977d3365a4f9f33933bb603037 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs new file mode 100644 index 0000000..c85190e --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs @@ -0,0 +1,27 @@ + +using System.Collections.Generic; + +public class OBJGroup +{ + //------------------------------------------------------------------------------------------------------------ + private readonly List m_Faces = new List(); + + //------------------------------------------------------------------------------------------------------------ + public OBJGroup(string lName) + { + m_Name = lName; + } + + //------------------------------------------------------------------------------------------------------------ + public string m_Name { get; private set; } + public OBJMaterial m_Material { get; set; } + + //------------------------------------------------------------------------------------------------------------ + public IList Faces { get { return m_Faces; } } + + //------------------------------------------------------------------------------------------------------------ + public void AddFace(OBJFace lFace) + { + m_Faces.Add(lFace); + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta new file mode 100644 index 0000000..f60404a --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8508b6de42212c84ebaec559aed6c7b6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs new file mode 100644 index 0000000..f57e0e4 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs @@ -0,0 +1,219 @@ + +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +/* + * Currently only supports Triangluar Meshes + */ + +public class OBJLoader +{ + //------------------------------------------------------------------------------------------------------------ + private static OBJData m_OBJData = null; + + //------------------------------------------------------------------------------------------------------------ + private static OBJMaterial m_CurrentMaterial = null; + private static OBJGroup m_CurrentGroup = null; + + #region PROCESSORS + + //------------------------------------------------------------------------------------------------------------ + private static readonly Dictionary> m_ParseOBJActionDictionary = new Dictionary> + { + { "mtllib", (lEntry) => { /*Load MTL*/ } }, + { "usemtl", (lEntry) => { PushOBJGroupIfNeeded(); m_CurrentGroup.m_Material = m_OBJData.m_Materials.SingleOrDefault((lX) => { return lX.m_Name.EqualsInvariantCultureIgnoreCase(lEntry); }); } }, + { "v", (lEntry) => { m_OBJData.m_Vertices.Add(Utils.ParseVector3String(lEntry)); } }, + { "vn", (lEntry) => { m_OBJData.m_Normals.Add(Utils.ParseVector3String(lEntry)); } }, + { "vt", (lEntry) => { m_OBJData.m_UVs.Add(Utils.ParseVector2String(lEntry)); } }, + { "vt2", (lEntry) => { m_OBJData.m_UV2s.Add(Utils.ParseVector2String(lEntry)); } }, + { "vc", (lEntry) => { m_OBJData.m_Colors.Add(Utils.ParseVector4String(lEntry).ToColor()); } }, + { "f", PushOBJFace }, + { "g", PushOBJGroup }, + }; + + //------------------------------------------------------------------------------------------------------------ + private static readonly Dictionary> m_ParseMTLActionDictionary = new Dictionary> + { + { "newmtl", PushOBJMaterial }, + { "Ka", (lEntry) => { m_CurrentMaterial.m_AmbientColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Ks", (lEntry) => { m_CurrentMaterial.m_SpecularColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Ns", (lEntry) => { m_CurrentMaterial.m_SpecularCoefficient = lEntry.ParseInvariantFloat(); } }, + { "d", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + { "Tr", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + { "illum", (lEntry) => { m_CurrentMaterial.m_IlluminationModel = lEntry.ParseInvariantInt(); } }, + { "map_Ka", (lEntry) => { m_CurrentMaterial.m_AmbientTextureMap = lEntry; } }, + { "map_Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseTextureMap = lEntry; } }, + { "map_Ks", (lEntry) => { m_CurrentMaterial.m_SpecularTextureMap = lEntry; } }, + { "map_Ns", (lEntry) => { m_CurrentMaterial.m_SpecularHighlightTextureMap = lEntry; } }, + { "map_d", (lEntry) => { m_CurrentMaterial.m_AlphaTextureMap = lEntry; } }, + { "map_bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + { "bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + { "disp", (lEntry) => { m_CurrentMaterial.m_DisplacementMap = lEntry; } }, + { "decal",(lEntry) => { m_CurrentMaterial.m_StencilDecalMap = lEntry; } }, + }; + + #endregion + + #region PUBLIC_INTERFACE + + //------------------------------------------------------------------------------------------------------------ + public static OBJData LoadOBJ(Stream lStream) + { + m_OBJData = new OBJData(); + + m_CurrentMaterial = null; + m_CurrentGroup = null; + + StreamReader lLineStreamReader = new StreamReader(lStream); + + Action lAction = null; + string lCurrentLine = null; + string[] lFields = null; + string lKeyword = null; + string lData = null; + + while (!lLineStreamReader.EndOfStream) + { + lCurrentLine = lLineStreamReader.ReadLine(); + + if (StringExt.IsNullOrWhiteSpace(lCurrentLine) + || lCurrentLine[0] == '#') + { + continue; + } + + lFields = lCurrentLine.Trim().Split(null, 2); + if (lFields.Length < 2) + { + continue; + } + + lKeyword = lFields[0].Trim(); + lData = lFields[1].Trim(); + + lAction = null; + m_ParseOBJActionDictionary.TryGetValue(lKeyword.ToLowerInvariant(), out lAction); + + if (lAction != null) + { + lAction(lData); + } + } + + var lOBJData = m_OBJData; + m_OBJData = null; + + return lOBJData; + } + + //------------------------------------------------------------------------------------------------------------ + public static void ExportOBJ(OBJData lData, Stream lStream) + { + StreamWriter lLineStreamWriter = new StreamWriter(lStream); + + lLineStreamWriter.WriteLine(string.Format("# File exported by Unity3D version {0}", Application.unityVersion)); + + for (int lCount = 0; lCount < lData.m_Vertices.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("v {0} {1} {2}", + lData.m_Vertices[lCount].x.ToString("n8"), + lData.m_Vertices[lCount].y.ToString("n8"), + lData.m_Vertices[lCount].z.ToString("n8"))); + } + + for (int lCount = 0; lCount < lData.m_UVs.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vt {0} {1}", + lData.m_UVs[lCount].x.ToString("n5"), + lData.m_UVs[lCount].y.ToString("n5"))); + } + + for (int lCount = 0; lCount < lData.m_UV2s.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vt2 {0} {1}", + lData.m_UVs[lCount].x.ToString("n5"), + lData.m_UVs[lCount].y.ToString("n5"))); + } + + for (int lCount = 0; lCount < lData.m_Normals.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vn {0} {1} {2}", + lData.m_Normals[lCount].x.ToString("n8"), + lData.m_Normals[lCount].y.ToString("n8"), + lData.m_Normals[lCount].z.ToString("n8"))); + } + + for (int lCount = 0; lCount < lData.m_Colors.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vc {0} {1} {2} {3}", + lData.m_Colors[lCount].r.ToString("n8"), + lData.m_Colors[lCount].g.ToString("n8"), + lData.m_Colors[lCount].b.ToString("n8"), + lData.m_Colors[lCount].a.ToString("n8"))); + } + + for (int lGroup = 0; lGroup < lData.m_Groups.Count; ++lGroup) + { + lLineStreamWriter.WriteLine(string.Format("g {0}", lData.m_Groups[lGroup].m_Name)); + + for (int lFace = 0; lFace < lData.m_Groups[lGroup].Faces.Count; ++lFace) + { + lLineStreamWriter.WriteLine(string.Format("f {0} {1} {2}", + lData.m_Groups[lGroup].Faces[lFace].ToString(0), + lData.m_Groups[lGroup].Faces[lFace].ToString(1), + lData.m_Groups[lGroup].Faces[lFace].ToString(2))); + } + } + + lLineStreamWriter.Flush(); + } + + #endregion + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJMaterial(string lMaterialName) + { + m_CurrentMaterial = new OBJMaterial(lMaterialName); + m_OBJData.m_Materials.Add(m_CurrentMaterial); + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJGroup(string lGroupName) + { + m_CurrentGroup = new OBJGroup(lGroupName); + m_OBJData.m_Groups.Add(m_CurrentGroup); + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJGroupIfNeeded() + { + if (m_CurrentGroup == null) + { + PushOBJGroup("default"); + } + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJFace(string lFaceLine) + { + PushOBJGroupIfNeeded(); + + var vertices = lFaceLine.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + var face = new OBJFace(); + + foreach (var vertexString in vertices) + { + face.ParseVertex(vertexString); + } + + m_CurrentGroup.AddFace(face); + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta new file mode 100644 index 0000000..6f1b11a --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bda02739f6fbaeb4c8c3da925164b8cf +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs new file mode 100644 index 0000000..92fac43 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs @@ -0,0 +1,42 @@ + +using UnityEngine; + +public class OBJMaterial +{ + //------------------------------------------------------------------------------------------------------------ + public OBJMaterial(string lMaterialName) + { + m_Name = lMaterialName; + } + + //------------------------------------------------------------------------------------------------------------ + public string m_Name; + + //------------------------------------------------------------------------------------------------------------ + public Color m_AmbientColor; + public Color m_DiffuseColor; + public Color m_SpecularColor; + public float m_SpecularCoefficient; + + //------------------------------------------------------------------------------------------------------------ + public float m_Transparency; + + //------------------------------------------------------------------------------------------------------------ + public int m_IlluminationModel; + + //------------------------------------------------------------------------------------------------------------ + public string m_AmbientTextureMap; + public string m_DiffuseTextureMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_SpecularTextureMap; + public string m_SpecularHighlightTextureMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_BumpMap; + public string m_DisplacementMap; + public string m_StencilDecalMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_AlphaTextureMap; +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta new file mode 100644 index 0000000..6bc3d38 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ceb2526c78b78c04592f312a4e65ec95 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils.meta new file mode 100644 index 0000000..0fc5553 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 32ca95fc59e8743b3b0033ddfb038e11 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs new file mode 100644 index 0000000..dabbd7c --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs @@ -0,0 +1,39 @@ + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +[StructLayout(LayoutKind.Explicit)] +public struct Int32Converter +{ + //------------------------------------------------------------------------------------------------------------ + [FieldOffset(0)] + public int Value; + [FieldOffset(0)] + public byte Byte1; + [FieldOffset(1)] + public byte Byte2; + [FieldOffset(2)] + public byte Byte3; + [FieldOffset(3)] + public byte Byte4; + + //------------------------------------------------------------------------------------------------------------ + public Int32Converter(int value) + { + Byte1 = Byte2 = Byte3 = Byte4 = 0; + Value = value; + } + + //------------------------------------------------------------------------------------------------------------ + public static implicit operator Int32(Int32Converter value) + { + return value.Value; + } + + //------------------------------------------------------------------------------------------------------------ + public static implicit operator Int32Converter(int value) + { + return new Int32Converter(value); + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta new file mode 100644 index 0000000..2999c35 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2980235c1e3576a4ab7dca278af19308 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Readme.txt b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt new file mode 100644 index 0000000..6134cda --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt @@ -0,0 +1,36 @@ + +/* * * * * * * * * * * * Author's note * * * * * * * * * * * * * *\ +* * +* ZZ$$Z$$$$Z$$$ * +* ZZZZZZZZZZZZZ * +* ZZZZZZZZZZZZZ * +* $ZZZZZZZZZZZZ * +* $ZZZZZZZZZZZZ * +* ZZ7=$OOO$?$ZO * +* Z7 $OZ IO * +* ZZZZZZZZOOOZOOOOOZZ8OZZZZZZZZZ * +* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * +* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * +* 8O8OOOOO8 88O88O8888888 D88888888 * +* 8OOOOOOO8 8OOON OO88 DO8888888 * +* DDDDDDDDD DDDD DDDD NDDDDDDDD * +* * +* http://octo-dev.co.uk * +* * +* OBJ-IO * +* * +* Copyright (c) Octo-Dev * +* * +\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +The scripts for this plugin are in [OBJ-IO/Plugins/OBJ] +and [OBJ-IO/Plugins/Extension]. + +There is an Example scene that Imports the Teapot OBJ at runtime, +distorts the vertexs and exports it again. The Export and Import +functions take System.IO.Stream as a parameter so this can be adapted +for your needs. + +The System Current only supports geometry. + +If there is any issue or bugs please contact : tim.leader.octo@gmail.com \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Readme.txt.meta b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt.meta new file mode 100644 index 0000000..6372bc3 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: e1f277bf041647445ac3bf5b643a46fe +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/WorldMain.cs b/integrations/Unity3D/Assets/WorldMain.cs new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/integrations/Unity3D/Assets/WorldMain.cs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integrations/Unity3D/Assets/ZT.mat b/integrations/Unity3D/Assets/ZT.mat new file mode 100644 index 0000000000000000000000000000000000000000..584ed8ed265d2f8b7c060032c11aae4896d71013 GIT binary patch literal 4888 zcmeI0%X1V(9LImNn`}bxg$M)ziSKt1F+L*+c>%(bU;Z^Ce+Rz@$DHQW&dFb}u^(gV=iB%&>^y^U ze>O*L{yxb`@^faVw@ts@4*g5DbJA|7&u~YM!T#5-f6Sx9j+Z z;dUM0G~BM^Ti~13agao@a68^3OV-S%c%oTJV{>6xSI1X{z z_^ph;)4^|N{6q)m$!OKPPJDi6ak#{D%H5=uFUvuh2zOa6bH3;RUIo&H&jDO6o+2D zvfx&V?uwkLd-3XA7_6u;UY)Nh71OADK`mv_Q?#<6n$z_Qk<{IqO4p<$or)Ww;q zD{0Cq`m@W+k+wDC2X3q#3H%_8B$SFQipzwE3~e3aLASwty4Bc$3rqv<4NTMj@Ul^; zqM#9$Rdk?1?@Nmf&yT%&Nj2lp#ZG4DcmJH9Jhk@Ccfo=x68R%x9 zn}Kcy{$B?8@Auq7x=rFXyw&)s%`Gp-TOiy$b&s#9vfP!3I}s{cSK+Dk3Mo@0E}GK@@FR01bN$eP?}2 z^I>_y$Nmp}>S#6<#dnzCWej?gjW}3drc$cY$|=CWm9Iv%&bjwOFIFJQn2uNb;?-3Y z>2(A6TVjpVt)SN9Cx$yYpN~UTuf$cVCu96<&{=D<6!ZLiQ#x~YUX`gYcuByx7%b5P hHXTbVFDcTWl=#`C)T-MgH=fy~Ib^oYTq}3!@jry09?bv% literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/Assets/ZeroTier.cs b/integrations/Unity3D/Assets/ZeroTier.cs new file mode 100644 index 0000000..c7c776b --- /dev/null +++ b/integrations/Unity3D/Assets/ZeroTier.cs @@ -0,0 +1,282 @@ +/* + * ZeroTier One - Network Virtualization Everywhere + * Copyright (C) 2011-2015 ZeroTier, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * -- + * + * ZeroTier may be used and distributed under the terms of the GPLv3, which + * are available at: http://www.gnu.org/licenses/gpl-3.0.html + * + * If you would like to embed ZeroTier into a commercial application or + * redistribute it in a modified binary form, please contact ZeroTier Networks + * LLC. Start here: http://www.zerotier.com/ + */ + +using UnityEngine; +using UnityEngine.UI; +using System; +using System.Collections; +using System.Runtime.InteropServices; +using System.Threading; +using UnityEngine.Networking; + +using System.Net.Sockets; +using System.Net; + +using System.IO; + + +public class ZeroTierNetworkInterface { + + // ZeroTier background thread + private Thread ztThread; + + // Interop structures + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet=System.Runtime.InteropServices.CharSet.Ansi)] + public struct sockaddr { + /// u_short->unsigned short + public ushort sa_family; + /// char[14] + [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=14)] + public string sa_data; + } + + // Virtual network interace config + private int MaxPacketSize; + private string rpc_path = "/does/this/work"; + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void MyDelegate(string str); + + static void CallBackFunction(string str) { + Debug.Log("Native ZT Plugin: " + str); + } + + // ZeroTier service / debug initialization + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + public static extern void SetDebugFunction( IntPtr fp ); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int unity_start_service(string path); + + // Connection calls + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_socket(int family, int type, int protocol); + + + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_bind(int sockfd, System.IntPtr addr, int addrlen); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_connect(int sockfd, System.IntPtr addr, int addrlen); + + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_accept(int sockfd); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_listen(int sockfd, int backlog); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_close(int sockfd); + + // RX / TX + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_recv(int sockfd, System.IntPtr buf, int len); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_send(int sockfd, System.IntPtr buf, int len); + + // ZT Thread controls + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern bool zt_is_running(); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern void zt_terminate(); + + // ZT Network controls + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern bool zt_join_network(string nwid); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern void zt_leave_network(string nwid); + + // Thread which starts the ZeroTier service + // The ZeroTier service may spin off a SOCKS5 proxy server + // if -DUSE_SOCKS_PROXY is set when building the bundle + private void zt_service_thread() + { + MyDelegate callback_delegate = new MyDelegate( CallBackFunction ); + // Convert callback_delegate into a function pointer that can be + // used in unmanaged code. + IntPtr intptr_delegate = + Marshal.GetFunctionPointerForDelegate(callback_delegate); + // Call the API passing along the function pointer. + SetDebugFunction( intptr_delegate ); + unity_start_service (rpc_path); + } + + // Start the ZeroTier service + private void Init() + { + // TODO: Handle exceptions from unmanaged code + ztThread = new Thread(() => { + try { + zt_service_thread(); + } catch(Exception e) { + Debug.Log(e.Message.ToString()); + } + }); + ztThread.IsBackground = true; // Allow the thread to be aborted safely + ztThread.Start(); + } + + // Initialize the ZeroTier service with a given path + public ZeroTierNetworkInterface(string path) + { + rpc_path = path; + Init(); + } + + // Initialize the ZeroTier service + public ZeroTierNetworkInterface() + { + Init(); + } + + // Initialize the ZeroTier service + // Use the GlobalConfig to set things like the max packet size + public ZeroTierNetworkInterface(GlobalConfig gConfig) + { + MaxPacketSize = gConfig.MaxPacketSize; // TODO: Do something with this! + Init(); + } + + // Joins a ZeroTier virtual network + public void JoinNetwork(string nwid) + { + zt_join_network(nwid); + } + + // Leaves a ZeroTier virtual network + public void LeaveNetwork(string nwid) + { + zt_leave_network(nwid); + } + + // Creates a ZeroTier Socket and binds on the port provided + // A client instance can now connect to this "host" + public int AddHost(int port) + { + int sockfd = zt_socket ((int)AddressFamily.InterNetwork, (int)SocketType.Stream, (int)ProtocolType.Unspecified); + if (sockfd < 0) { + return -1; + } + GCHandle sockaddr_ptr = ZeroTierUtils.Generate_unmananged_sockaddr("0.0.0.0" + ":" + port); + IntPtr pSockAddr = sockaddr_ptr.AddrOfPinnedObject (); + int addrlen = Marshal.SizeOf (pSockAddr); + return zt_bind (sockfd, pSockAddr, addrlen); + } + + // hostId - host socket ID for this connection + public int Connect(int hostId, string address, int port, out byte error) + { + int sockfd = zt_socket ((int)AddressFamily.InterNetwork, (int)SocketType.Stream, (int)ProtocolType.Unspecified); + Debug.Log ("sockfd = " + sockfd); + + if (sockfd < 0) { + error = (byte)sockfd; + return -1; + } + GCHandle sockaddr_ptr = ZeroTierUtils.Generate_unmananged_sockaddr(address + ":" + port); + IntPtr pSockAddr = sockaddr_ptr.AddrOfPinnedObject (); + int addrlen = Marshal.SizeOf (pSockAddr); + error = (byte)zt_connect (sockfd, pSockAddr, addrlen); + return sockfd; + } + + // Returns whether the ZeroTier service is currently running + public bool IsRunning() + { + return zt_is_running (); + } + + // Terminates the ZeroTier service + public void Terminate() + { + zt_terminate (); + } + + // Shutdown a given connection + public int Disconnect(int fd) + { + return zt_close (fd); + } + + // Sends data out over the network + + public int Send(int fd, char[] buf, int len, out byte error) + { + int bytes_written = 0; + error = 0; + + GCHandle buf_handle = GCHandle.Alloc (buf, GCHandleType.Pinned); + IntPtr pBufPtr = buf_handle.AddrOfPinnedObject (); + + //int len = Marshal.SizeOf (pBufPtr); + if((bytes_written = zt_send (fd, pBufPtr, len)) < 0) { + error = (byte)bytes_written; + } + return bytes_written; + } + + + // Structure used to house arrays meant to be sent to unmanaged memory and passed to the + // ZeroTier service + public struct UnityArrayInput + { + public IntPtr array; + } + + /* + // Sends data out over the network + public int Send(int fd, char[] buf, int len, out byte error) + { + //char[] buffer = new char[1024]; + UnityArrayInput data = new UnityArrayInput (); + data.array = Marshal.AllocHGlobal (Marshal.SizeOf (typeof(char))*buf.Length); + //data.len = buf.Length; + int bytes_written = 0; + error = 0; + + try + { + Marshal.Copy(buf, 0, data.array, buf.Length); + + Debug.Log(buf.Length); + // ZT API call + if((bytes_written = zt_send (fd, data.array, buf.Length)) < 0) { + error = (byte)bytes_written; + } + return bytes_written; + } + finally + { + Marshal.FreeHGlobal (data.array); + } + return 0; + } + */ + + // Checks for data to RX + public int OnReceive(int fd, byte[] buf, int len) + { + return 0; + //return zt_read(fd, buf, len); + } +} diff --git a/integrations/Unity3D/Assets/ZeroTierUtils.cs b/integrations/Unity3D/Assets/ZeroTierUtils.cs new file mode 100644 index 0000000..a1da79d --- /dev/null +++ b/integrations/Unity3D/Assets/ZeroTierUtils.cs @@ -0,0 +1,55 @@ +using UnityEngine; +using System.Collections; +using System.Net; +using System; +using System.Globalization; +using System.Runtime.InteropServices; + +public class ZeroTierUtils { + + // Handles IPv4 and IPv6 notation. + public static IPEndPoint CreateIPEndPoint(string endPoint) + { + string[] ep = endPoint.Split(':'); + if (ep.Length < 2) throw new FormatException("Invalid endpoint format"); + IPAddress ip; + if (ep.Length > 2) { + if (!IPAddress.TryParse(string.Join(":", ep, 0, ep.Length - 1), out ip)) { + throw new FormatException("Invalid ip-adress"); + } + } + else { + if (!IPAddress.TryParse(ep[0], out ip)) { + throw new FormatException("Invalid ip-adress"); + } + } + int port; + if (!int.TryParse(ep[ep.Length - 1], NumberStyles.None, NumberFormatInfo.CurrentInfo, out port)) { + throw new FormatException("Invalid port"); + } + return new IPEndPoint(ip, port); + } + + // Generates an unmanaged sockaddr structure from a string-formatted endpoint + public static GCHandle Generate_unmananged_sockaddr(string endpoint_str) + { + IPEndPoint ipEndPoint; + ipEndPoint = ZeroTierUtils.CreateIPEndPoint (endpoint_str); + SocketAddress socketAddress = ipEndPoint.Serialize (); + + // use an array of bytes instead of the sockaddr structure + byte[] sockAddrStructureBytes = new byte[socketAddress.Size]; + GCHandle sockAddrHandle = GCHandle.Alloc (sockAddrStructureBytes, GCHandleType.Pinned); + for (int i = 0; i < socketAddress.Size; ++i) { + sockAddrStructureBytes [i] = socketAddress [i]; + } + return sockAddrHandle; + } + + public static GCHandle Generate_unmanaged_buffer(byte[] buf) + { + // use an array of bytes instead of the sockaddr structure + GCHandle sockAddrHandle = GCHandle.Alloc (buf, GCHandleType.Pinned); + return sockAddrHandle; + } +} diff --git a/integrations/Unity3D/Assets/smcs.rsp b/integrations/Unity3D/Assets/smcs.rsp new file mode 100644 index 0000000..46ef843 --- /dev/null +++ b/integrations/Unity3D/Assets/smcs.rsp @@ -0,0 +1 @@ +-unsafe \ No newline at end of file diff --git a/integrations/Unity3D/Assets/zerotier-icon.png b/integrations/Unity3D/Assets/zerotier-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9641b344329a3790f94206d012f2a9ce2e0750 GIT binary patch literal 26898 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 literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/AudioManager.asset b/integrations/Unity3D/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..d2a92d77828b2d0dd0af3c9f6661e200b177b7df GIT binary patch literal 4140 zcmeH~v1%JZ5QgWZ#Id8uPL;;Zfl~&95JHV1vMqv(2y7iz8#dCOxOjCdE_X#zUF|L} z5J({D+_=iqxH9-HeE$DEU*i`@vjfA<|K02|`*Y2Tw7!VEekUS3Sh0u<_WS#TxF`2j zRRsY+2YLHv@?*GncaZ+;X1`Nepj)nx{LUDPl<2RVD9Ho)+m`Y=kn$NI`|1qj7kazU zL(ytt2|K#JF-(# zER&Q6C12HNqurS9BK37RJ%c|OE$P5CY9HPK?|^r}JK!Dg4tNK=1Kt7efOo(<@IM?V S-{ZyU(mltU5g@{*#`*w-^>-Qo literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/ClusterInputManager.asset b/integrations/Unity3D/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..de328e54b63137f319ce1e898a42e60c12fbf15f GIT binary patch literal 4104 zcmeH_yGjE=6o$|2=HmTsCBA?~AV{zc#6k-Nk=RO*QIsUe=28!6ZR;DD!p?UQA&8BZ zc?Q@2-&s}`Q(K*Z!@=n~>9>%-4Pe+hY-K3;38KA&)!{%Xbx$@ku+@3IEY zLEq?eIq*KOdn}Fipx3w2VfS{>KWcSbS2mK)c~bUri=g{y-~)fD&eQ>QKpjvA)B$xs9Z(0<0d+tfPzV0QfgebudzJtI literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/DynamicsManager.asset b/integrations/Unity3D/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..188d025e5718e1a6aed3778de502a2f44d23b2ef GIT binary patch literal 4276 zcmeH~ziSjh6vyA*`Sbj(SV$BD_6I>j3WG#1ITK9CiYcs=@iLbiS$D(i+>tZQ{Rtvy zFQQ;8)`p;ef|AZgtgKTBp5O28M6a+HWM+BHo6o#`@6C6&8IkG%k(2L4_75&`Bn(>EWWuB5h^t?un!Sk~JP56vILWn`mx=-Pg zvnLMnMesL;FLJD)fB1XPkCV@o{4@Iege7&Rex;t3Xaad?TZmVwM_7F(Z zBzj>MPOMy~aBgJXw53-%R_C28S;f|!MCt^jVwt_js$4anhh@x&g}<( ze*WT95O$A+IVcbm2nqxRf&xK-pg>R{C=e6~3jD7MeAqp|{g<=N)OKE8t?gWz<~5qv M%5fO4ng4S90!s56KmY&$ literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/EditorBuildSettings.asset b/integrations/Unity3D/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..84a3acf47b51abcc48b5a3583a11c439386c2a77 GIT binary patch literal 4104 zcmeH@Jx&8L6okjwP53K9K`KN=35tkNNE;y`QP7|q00q{BMPWf?sc}og0dfE;8n_EB z7vK&oGiE8$Q$Aax=Qn;o(g(O_V0{@tn~?$NclW#f%O1X~s&bA-Ck6ccZSvJF4+c;3 z>~;4MYxMW12Bk9q0_&@o1ivS z;gp@)t9-TgkFvbHy+3@&r`gDtWnN5XxH%hL_`=T+1AH+)pZW}Ubv;RZKAe literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/EditorSettings.asset b/integrations/Unity3D/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..d32ad8cee0a07e563d28ac5708978f1dcd9349c1 GIT binary patch literal 4212 zcmeHKJ#Q015S@$pO!)pRpa@M$TTv7t;U*#&oFd4<0?KG}H%>0x?OJ<#*rwqs{sDD5 zL`|6riT{CUk!bP)eO^1kCpvtWJ@~K7I*b1X>es+k zeJ?kGmtN(+HN{&|?2PTQbFtpdDBW%i9b2uE7i_cG=yju=HAy$`_lqs3?+tJ7&OEI6BtsbLgJ1W?LSpy5T27^I89YrQpv95yj6Vewc!Zx;Bk(DQoU z^1NKnLGb6*^S0-KJcRzYv){oiqpTiTh4zo*y!U01+}6JbL0SJH^3izx?|NSD=V5XP z`+OWRSU=;uM>ry{$rbcx*~Nd~^O@51IszUn(tkGVe}27=l4oO9ZXhD#)BeEoTIsy} z{@J`UrSpDBzG&-V9~ub4I3IZ)WOh|D?hn zI6hzDzdL@i!k;*Ps={aSfWeaBe$Rw;vYum(^Lazb`8mhWTI~6f#4b5y)J@T4a!Q?)mN9G)K%Ka zlzit+z1G!X8YS@n%d5Jr!p(dQ;8J&8Z4R!+VRzWlEgO%Hb)&lpit(tB`CDZo6{nYz zu8Vw8>RpwtC8jrafC?B6bR#rc$Bn)UH5Ze0rsMfr-zd}8X=TTMuatK2D8n@AsWb|q zuSV@o+Ee{TYNCE0Ee2aj+C?*Wxvq5|A<7|z61PO!LjT}ZeOd| npF2B$rGEAbjfL}eG22_vrwaN$_pU&nx%|BWI_;taxd1)|e}a2l literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/InputManager.asset b/integrations/Unity3D/ProjectSettings/InputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..9eeb05c5ccd1df3eec107ebe7b8dc2fcb771e3bc GIT binary patch literal 5520 zcmeI0%W4!s6oyZmiTAt4#CVJM%OV&>1VN1&Llg~)cmqM&nM%@erhDk_iAit~aFdm0 z;{%A`M%=h@=MzL+xfQ{k4`KZO>dQ+Z2nLHmje-nyI@nM402ZOn;S z_32hI2$l)bxMLO`?iO0#f zeQHAEZnHy1)F@%dtItW{Qa=WUynK(H_P9^ z{s#U=>IOdJ5$O@XA2#`$QJeT!EhC>xXyR{6^@u+VoBZvlP5d3~ZPdc?mE zoBUml%=k&L+exyaeh5qn?ugKAy{vp2d$DLAs zDB(<9iOq>kdNZSqnvPU-QFFUt$8`m@$l##2{nZ85Y-=spVaNmg zEAEt=R5B~x3zu8}Mm^#Mc&6_QT+8t|k737GI3~yxZqGT-zH;a%)8`hy<~0J(hcb>Z66Tp)1Lv-p*nP06$>ZoN^Ul(#r7*^t7fd)~n%K(Z=mko3>{ zp6MN~&cG(O{Te0Ad@h=p*>P89=JV0S%#PchY05_vFFR&?9*^nnHJ;U+_`67AMcr3n z!*?UaGzP!!q^bW3~oKY|II A761SM literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/NavMeshAreas.asset b/integrations/Unity3D/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000000000000000000000000000000000000..f3360b06113db6d6bd765dd940781dfe8365b89f GIT binary patch literal 4384 zcmeH~y-EW?6ot=Zf8tL>gQd-ajUWbs1j{H`1i^rn^(ZT%8zb&&8MYJ)OAD=Rd;lLs zv6YCAVDEbFtc0Yuk~_y6e?6W>Kq7(-#eSiSvx zNovFU=rxOq~60KwA{45mAdJOPdMREYZ&Jr zVvpY9FMUssbRUn@R+vjKGYsjcYp-_W^mywcwkfQe$E0nWS)AEkjKhAK@uxD%*=-Rq z5zGTNT`D>&0VSXWlzl5wrkA0{VW>S T7M_|9$-dOek-D literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/NetworkManager.asset b/integrations/Unity3D/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..4488849d92283fe5e57a0a646e7ae6c22d87e289 GIT binary patch literal 4112 zcmeH_&q@MO6vodTwbK5%FK8KUBr|DO2vP|B5eiy_)D^F0nZ`KTc6x#!aMj99>uB3c z^aAw`MZ2KsJ2TTHK0%9f;mkSrHy`($`^^wp>qO}^5zQha5#=+vOun9_Z_o3T0_Y=d zlfBowkLS|k&C=k@{!}b&BKSS8H6j;!FW50x^bjNWNs$`|WL*%7-k?P{Vs0ULv3>wP zkD7UmAr|v@@I};o{@+=a%7Sw+PxxBa$Ncl>(3`bmLwvy^_Y8XOF&^zu9b=QV~U2JEthPS?M^?oLW`%gKxW z1>O|vS;V6kDX0haqQ#5)Hwfavi}Cw*cKZ|0UiKxAdG9lC-p;-^1SUisZ-|b3CZfX_ zF%XRoogW%q8m2$3R?Be!dZB$!dd~iw|GoO~>Dv0oR-=0W>=P#2FtS`AY9hWBIZYx5 zpJ(mVeBn^D1CaArb?7VjQTY3zcKsmc+UPNIa9)mYhZ1e_Gw_(RTJB($=pytWbPtq; z^L$61E3i3sZ^SGg!gF2t{M>yT+==3E!smFNW8wXCo_nyFA7BV!&ilL%n|UWgNWve% zX5PgRlJMuSne$#*68;u8^KOQagnxt0{18J(!hgVKj&4Pg@Gi%4+rrKGftdH~h`$tb z?gLAbXEx^CbC!hPiuo~%Bc3N}E`#GseLMJrm>=K4S7UyH`J~Oij=sDC=ks$CnDe2J z&M@+`GC#G!+oQhpV-45g^cK$N?GECZ_s6_YX@sg2j$~bFjPlAMRTpLhv8+skR;WRR zf(gdrpgCb=poAXDjw327mqcBg1cJ;cEpu5I1z{?YaYJgqgj6{!6h`?Tr!V-SVtX4* zB8!zkh815gB5+QuDX#lwJ5pXjdeYbp z&G-R4q4B!ag=tZ*mPKHsTM}As1w~brSC?|tnkboMl3CGrwUjl4+MPyT(bsrguf!SR zt?uI2>L{fQFDp|FRJkkzu1pMFgFWQDjIXs?v@@BC@XFFPel5%ht#6CcU0#qE4TP1g@3&Gxc1@zB`h7&3ZxZCE09(otw36Vv;t`b(h8&%_;&@?ehs|d vI?LB!dj)S!e0ZN9hdV{|Zkp(2rt{0WG0P?=z$e(pILZGN48q{++W(ZlqMwU{ literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/ProjectSettings.asset b/integrations/Unity3D/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..a97930ab25eaa172d4b6e380f05fae8109ea1772 GIT binary patch literal 37361 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 PS=aG&au{ta=rR8d+y)O* literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/TagManager.asset b/integrations/Unity3D/ProjectSettings/TagManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..239cc3a87eff3812aa36e663dc72d8e7ba89ad74 GIT binary patch literal 4308 zcmeH~y-piJ6ov2l4-)==0*PoW8aD_DAqyczkqaPLBA^f>=+MZlR|YeN-F4w^%REC0 z=qPv$DjpzdQshBW#5rdcuUKho8fL8B@%?=F`rI?yT#?*gk?EfzGKC$RNOg66wc1*f ze}lomaRByl-QJ%+EdSOkKMrmxt&fijAD(y)JJ*Itg#3XCA`u6lUwMhf0LWQKzLV#i zHRSRlH_scMmp@=jc&32VJo87HpO;;*^QV0N7S}1H>J)*UUFH{4bxP!>PEo$12J2AE zNWx>CY@K?LnyK?m!qYn6l4s~--&s1xfwOc@kZ0(eOn9tw5ixb*w9pCrP5Wt%(D1a* z8Rlcr&kFXTpRFm|sfy{EpmQrIgPL2`|VU&hZmso+10- z;{WbJ!DsVbz-TRl1{gI;hq^~@r~uN_`>tG-bb^H?XnJ72do3u0qcNuz&cB))@}cTCRS*JTaqK=;A*M7Dj`Bx!++Ju6 L$M~V{;otrTTO6sT literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/TimeManager.asset b/integrations/Unity3D/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..a25d708ef3c316e4bbf621f05b06250cc3a2f2b4 GIT binary patch literal 4112 zcmZQzVB}+95D;KsVBiPRK#GCERL@w?G|iCV-~a#r85w~BtU$c@RmvB^9M=<_(`^;r zz8Aa#5_14zkUR*OGcYtjv_treK$&IC3=NwY85&rCLLhYz%*e11sFnxF2Z=KQF#`uk z4k9iM6=y~hH-US6ov0JYW=BI!JXTRyFx9+ZM!I1P*iGlB@#(0kv5TLy3kc#!52{6xYvb` z;?g(Kc+MnMM4v!r;LhCp&CSW=%qk*<8Ik2x5m~~DMWj)!R~!ABe57fr6hH;j?aNdB zp?Grlx_*3LdheCX;4Xsu99tp@`cqRRE$T_v7nQ`iGq9mI}a8PFlyp5da!Ph~Ryr62x801A@)g*W14Qvh1P-m9hgd>OG zmk8E#Up&*tp3$Gj`j`F!`M!QJ7Y6#e<;7iJ>ma;{Wq8&B3fw_(kS suBiO_CL4CO4p;}Q1J(iSfOWt+U>&dySO=^F)`9=!0RH{>OFa3gPttQ@{r~^~ literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ProjectSettings/UnityConnectSettings.asset b/integrations/Unity3D/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..ec04bc797d6203c3003eb46678cbe1bf16752d2b GIT binary patch literal 4116 zcmeH~y-EW?6ov03@h|@WRkjv327)A7Mnq6hqQsOUOWeejxCy%xAy!-1_zV_yb~fSz z_!>4gcD{j)>p8od7%;Wf4BVZ2zqxy6I6KXXq&$(iB@vm$j7g-B+sGB_dHD{*P$_^S z9uL{Ox5XFlYvE(H{dxbiHV=M_;5x^qNPzw@DgtsPk7)^>l>`|;_Qj!O895`Bgalkm z$pJJ@(a*j#f}_XRqg;eqQX*Hfg_Oa4M=%f5870T)>6D{fWGte;yr(}-UW)l1&Tpfn z{sehIo>qBe4Du|nDv@X89c%^f@Qjn>QDo#8{1U->s?SqGeT|wr)0pM;ul@}1FnxTj zq5AxU+^6a~y1UbIUAv|$w$_f@@MCz?@oE>A576gVXD7C=4_oJU+_LRj&8~K8{y@h* z1RbmC+}LHeqAgE%+7iFFdu_YA>NS%Ro7SBMYn}rmnWCH*jn}EDlB*I?^Dqt=2aE&8 a0poyiz&KzWFb)_8j047je{*2qC+!C&rFX&r literal 0 HcmV?d00001 diff --git a/integrations/Unity3D/ZeroTier-Unity3D-Test.sln b/integrations/Unity3D/ZeroTier-Unity3D-Test.sln new file mode 100644 index 0000000..44dad97 --- /dev/null +++ b/integrations/Unity3D/ZeroTier-Unity3D-Test.sln @@ -0,0 +1,29 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2008 + +Project("{9AF94C27-9A63-1F6F-49AF-DCF505B8257A}") = "ZeroTier-Unity3D-Test", "Assembly-CSharp.csproj", "{5AB900A8-5B14-044A-A52D-10417305A5D2}" +EndProject +Project("{9AF94C27-9A63-1F6F-49AF-DCF505B8257A}") = "ZeroTier-Unity3D-Test", "Assembly-CSharp-Editor.csproj", "{24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Release|Any CPU.Build.0 = Release|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Assembly-CSharp.csproj + EndGlobalSection +EndGlobal diff --git a/integrations/Unity3D/ZeroTier-Unity3D-Test.userprefs b/integrations/Unity3D/ZeroTier-Unity3D-Test.userprefs new file mode 100644 index 0000000..45e7d23 --- /dev/null +++ b/integrations/Unity3D/ZeroTier-Unity3D-Test.userprefs @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/make-linux.mk b/make-linux.mk index 808e14e..d67c3c9 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -83,8 +83,8 @@ endif # Debug output for Network Containers # Specific levels can be controlled in netcon/common.inc.c -ifeq ($(NETCON_DEBUG),1) - DEFS+=-DNETCON_DEBUG +ifeq ($(SDK_DEBUG),1) + DEFS+=-DSDK_DEBUG endif # Uncomment for gprof profile build @@ -104,7 +104,7 @@ one: $(OBJS) service/OneService.o one.o osdep/LinuxEthernetTap.o netcon: $(OBJS) FORCE rm -f *.o # Need to selectively rebuild one.cpp and OneService.cpp with ZT_SERVICE_NETCON and ZT_ONE_NO_ROOT_CHECK defined, and also NetconEthernetTap - $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SERVICE_NETCON -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl # Build netcon/liblwip.so which must be placed in ZT home for zerotier-netcon-service to work cd netcon ; make -f make-liblwip.mk # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility diff --git a/make-mac.mk b/make-mac.mk index fe23a94..f14f340 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -69,8 +69,8 @@ endif # Debug output for Network Containers # Specific levels can be controlled in netcon/common.inc.c -ifeq ($(NETCON_DEBUG),1) - DEFS+=-DNETCON_DEBUG +ifeq ($(SDK_DEBUG),1) + DEFS+=-DSDK_DEBUG endif CXXFLAGS=$(CFLAGS) -fno-rtti @@ -85,10 +85,10 @@ one: $(OBJS) service/OneService.o one.o $(CODESIGN) -f -s $(CODESIGN_APP_CERT) zerotier-one $(CODESIGN) -vvv zerotier-one -sdk: $(OBJS) +netcon: $(OBJS) rm -f *.o # Need to selectively rebuild one.cpp and OneService.cpp with ZT_SERVICE_NETCON and ZT_ONE_NO_ROOT_CHECK defined, and also NetconEthernetTap - $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SERVICE_NETCON -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl # Build netcon/liblwip.so which must be placed in ZT home for zerotier-netcon-service to work cd netcon ; make -f make-liblwip.mk # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility diff --git a/src/SDK_Debug.c b/src/SDK_Debug.c index 092fc24..b04163c 100644 --- a/src/SDK_Debug.c +++ b/src/SDK_Debug.c @@ -57,7 +57,7 @@ void dwr(int level, const char *fmt, ... ); void dwr(int level, const char *fmt, ... ) { -#if defined(_SDK_DEBUG) +#if defined(ZT_SDK_DEBUG) if(level > DEBUG_LEVEL) return; int saveerr; diff --git a/src/SDK_EthernetTap.cpp b/src/SDK_EthernetTap.cpp index 415eafc..e77d31a 100644 --- a/src/SDK_EthernetTap.cpp +++ b/src/SDK_EthernetTap.cpp @@ -60,7 +60,7 @@ #include "SDK_Debug.c" #include "SDK_ServiceSetup.hpp" -#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__UNITY_3D__) +#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__UNITY_3D__) && !defined(__APPLE__) const ip_addr_t ip_addr_any = { IPADDR_ANY }; #endif diff --git a/src/SDK_Intercept.c b/src/SDK_Intercept.c index 5e96eae..8ea2b35 100644 --- a/src/SDK_Intercept.c +++ b/src/SDK_Intercept.c @@ -25,6 +25,8 @@ * LLC. Start here: http://www.zerotier.com/ */ +#if defined(ZT_SDK_INTERCEPT) + #include #include #include @@ -569,3 +571,5 @@ pthread_key_t thr_id_key; #endif #endif +#endif // ZT_SDK_INTERCEPT + diff --git a/src/SDK_ServiceSetup.cpp b/src/SDK_ServiceSetup.cpp index 0a8abde..eaa406e 100644 --- a/src/SDK_ServiceSetup.cpp +++ b/src/SDK_ServiceSetup.cpp @@ -132,9 +132,9 @@ extern "C" { intercept_thread_id = (int*)malloc(sizeof(int)); *intercept_thread_id = mode; pthread_setspecific(thr_id_key, intercept_thread_id); - #if !defined(__UNITY_3D__) - check_intercept_enabled_for_thread(); - #endif + //#if !defined(__UNITY_3D__) + // check_intercept_enabled_for_thread(); + //#endif } #endif diff --git a/tests/kq/build.sh b/tests/kq/build.sh index 4a57255..3c86554 100755 --- a/tests/kq/build.sh +++ b/tests/kq/build.sh @@ -1,4 +1,4 @@ -gcc kq_test_client.c ../../kq.c ../../zt_api.c ../../RPC.c -DNETCON_DEBUG -DNETCON_INTERCEPT -o kq_test_client +gcc kq_test_client.c ../../kq.c ../../zt_api.c ../../RPC.c -DZT_SDK_DEBUG -DNETCON_INTERCEPT -o kq_test_client #gcc kq_test_server.c ../../kq.c -o kq_test_server gcc server.c -o server